Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 404082 | Differences between
and this patch

Collapse All | Expand All

(-)a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/server/ConnectionEstablisher.java (-6 / +9 lines)
Lines 1-5 Link Here
1
/*******************************************************************************
1
/*******************************************************************************
2
 * Copyright (c) 2002, 2012 IBM Corporation and others.
2
 * Copyright (c) 2002, 2014 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
5
 * which accompanies this distribution, and is available at
Lines 31-36 Link Here
31
 * David McKnight   (IBM) - [378136] [dstore] miner.finish is stuck
31
 * David McKnight   (IBM) - [378136] [dstore] miner.finish is stuck
32
 * David McKnight    (IBM) - [388472] [dstore] need alternative option for getting at server hostname
32
 * David McKnight    (IBM) - [388472] [dstore] need alternative option for getting at server hostname
33
 * David McKnight   (IBM)  - [390681] [dstore] need to merge differences between HEAD stream and 3.2 in ConnectionEstablisher.finished()
33
 * David McKnight   (IBM)  - [390681] [dstore] need to merge differences between HEAD stream and 3.2 in ConnectionEstablisher.finished()
34
 * David McKnight  (IBM)   [439545][dstore] potential deadlock on senders during shutdown
34
 *******************************************************************************/
35
 *******************************************************************************/
35
36
36
package org.eclipse.dstore.core.server;
37
package org.eclipse.dstore.core.server;
Lines 224-234 Link Here
224
		if (_dataStore.getClient() != null) {
225
		if (_dataStore.getClient() != null) {
225
			_dataStore.getClient().getLogger().logInfo(this.getClass().toString(), "ConnectionEstablisher.finished()"); //$NON-NLS-1$
226
			_dataStore.getClient().getLogger().logInfo(this.getClass().toString(), "ConnectionEstablisher.finished()"); //$NON-NLS-1$
226
		}
227
		}
227
		if (_dataStore.getClient() != null) {
228
228
			_dataStore.getClient().getLogger().logInfo(this.getClass().toString(), "ConnectionEstablisher - removing sender"); //$NON-NLS-1$
229
		}
230
		_updateHandler.removeSenderWith(receiver.socket());
231
		
232
		if (_dataStore.getClient() != null) {
229
		if (_dataStore.getClient() != null) {
233
			_dataStore.getClient().getLogger().logInfo(this.getClass().toString(), "ConnectionEstablisher - removing receiver"); //$NON-NLS-1$
230
			_dataStore.getClient().getLogger().logInfo(this.getClass().toString(), "ConnectionEstablisher - removing receiver"); //$NON-NLS-1$
234
		}
231
		}
Lines 249-254 Link Here
249
			_updateHandler.finish();
246
			_updateHandler.finish();
250
			
247
			
251
			if (_dataStore.getClient() != null) {
248
			if (_dataStore.getClient() != null) {
249
				_dataStore.getClient().getLogger().logInfo(this.getClass().toString(), "ConnectionEstablisher - removing sender"); //$NON-NLS-1$
250
			}
251
			_updateHandler.removeSenderWith(receiver.socket());
252
			
253
			
254
			if (_dataStore.getClient() != null) {
252
				_dataStore.getClient().getLogger().logInfo(this.getClass().toString(), "ConnectionEstablisher - finishing DataStore"); //$NON-NLS-1$
255
				_dataStore.getClient().getLogger().logInfo(this.getClass().toString(), "ConnectionEstablisher - finishing DataStore"); //$NON-NLS-1$
253
			}
256
			}
254
			_dataStore.finish();
257
			_dataStore.finish();
(-)a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/server/ServerUpdateHandler.java (-54 / +30 lines)
Lines 1-5 Link Here
1
/*******************************************************************************
1
/*******************************************************************************
2
 * Copyright (c) 2002, 2013 IBM Corporation and others.
2
 * Copyright (c) 2002, 2014 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
5
 * which accompanies this distribution, and is available at
Lines 18-23 Link Here
18
 * David McKnight    (IBM)  - [358301] [DSTORE] Hang during debug source look up
18
 * David McKnight    (IBM)  - [358301] [DSTORE] Hang during debug source look up
19
 * David McKnight  (IBM)   [388873][dstore] ServerUpdateHandler _senders list should be synchronized
19
 * David McKnight  (IBM)   [388873][dstore] ServerUpdateHandler _senders list should be synchronized
20
 * David McKnight  (IBM)   [404082][dstore] race condition on finish, removing senders
20
 * David McKnight  (IBM)   [404082][dstore] race condition on finish, removing senders
21
 * David McKnight  (IBM)   [439545][dstore] potential deadlock on senders during shutdown
21
 *******************************************************************************/
22
 *******************************************************************************/
22
23
23
package org.eclipse.dstore.internal.core.server;
24
package org.eclipse.dstore.internal.core.server;
Lines 41-46 Link Here
41
public class ServerUpdateHandler extends UpdateHandler
42
public class ServerUpdateHandler extends UpdateHandler
42
{
43
{
43
44
45
	private Sender _primarySender; // there should really only be one
44
46
45
	private ArrayList _senders;
47
	private ArrayList _senders;
46
	private CommandGenerator _commandGenerator;
48
	private CommandGenerator _commandGenerator;
Lines 164-169 Link Here
164
		synchronized(_senders){
166
		synchronized(_senders){
165
			_senders.add(sender);
167
			_senders.add(sender);
166
		}
168
		}
169
		_primarySender = sender;
167
	}
170
	}
168
171
169
	/**
172
	/**
Lines 174-179 Link Here
174
	{
177
	{
175
		synchronized (_senders){
178
		synchronized (_senders){
176
			_senders.remove(sender);
179
			_senders.remove(sender);
180
		}
181
		if (sender == _primarySender){
182
			_primarySender = null;
177
		}
183
		}
178
		if (_senders.size() == 0)
184
		if (_senders.size() == 0)
179
		{
185
		{
Lines 213-226 Link Here
213
		document.setAttribute(DE.A_SOURCE, path);
219
		document.setAttribute(DE.A_SOURCE, path);
214
		document.setPendingTransfer(true);
220
		document.setPendingTransfer(true);
215
		document.setParent(null);
221
		document.setParent(null);
216
222
		
217
		synchronized (_senders){
223
		_primarySender.sendFile(document, bytes, size, binary);
218
			for (int j = 0; j < _senders.size(); j++)
219
			{
220
				Sender sender = (Sender) _senders.get(j);
221
				sender.sendFile(document, bytes, size, binary);
222
			}
223
		}
224
	}
224
	}
225
225
226
	/**
226
	/**
Lines 254-266 Link Here
254
		document.setAttribute(DE.A_SOURCE, path);
254
		document.setAttribute(DE.A_SOURCE, path);
255
		document.setPendingTransfer(true);
255
		document.setPendingTransfer(true);
256
		document.setParent(null);
256
		document.setParent(null);
257
		synchronized (_senders){
257
		
258
			for (int j = 0; j < _senders.size(); j++)
258
		_primarySender.sendAppendFile(document, bytes, size, binary);
259
			{
260
				Sender sender = (Sender) _senders.get(j);
261
				sender.sendAppendFile(document, bytes, size, binary);
262
			}
263
		}
264
	}
259
	}
265
	
260
	
266
261
Lines 296-318 Link Here
296
			
291
			
297
			_commandGenerator.generateResponse(document, _dataObjects);
292
			_commandGenerator.generateResponse(document, _dataObjects);
298
293
299
			synchronized (_senders){
294
			_primarySender.sendDocument(document, 20);
300
				for (int j = 0; j < _senders.size(); j++)
295
			if (_pendingKeepAliveConfirmation != null)
301
				{
296
			{
302
					Sender sender = (Sender) _senders.get(j);
297
				_primarySender.sendKeepAliveConfirmation(_pendingKeepAliveConfirmation);
303
					sender.sendDocument(document, 5);
298
				_pendingKeepAliveConfirmation = null;
304
					if (_pendingKeepAliveConfirmation != null)
305
					{
306
						sender.sendKeepAliveConfirmation(_pendingKeepAliveConfirmation);
307
						_pendingKeepAliveConfirmation = null;
308
					}
309
					if (_pendingKeepAliveRequest != null)
310
					{
311
						sender.sendKeepAliveRequest(_pendingKeepAliveRequest);
312
						_pendingKeepAliveRequest = null;
313
					}
314
				}
315
			}
299
			}
300
			if (_pendingKeepAliveRequest != null)
301
			{
302
				_primarySender.sendKeepAliveRequest(_pendingKeepAliveRequest);
303
				_pendingKeepAliveRequest = null;
304
			}
305
316
306
317
			for (int i = 0; i < _dataObjects.size(); i++)
307
			for (int i = 0; i < _dataObjects.size(); i++)
318
			{
308
			{
Lines 363-369 Link Here
363
				sender.sendDocument(document, 2);
353
				sender.sendDocument(document, 2);
364
				removeSender(sender);
354
				removeSender(sender);
365
			}
355
			}
366
		}		
356
		}	
357
		if (_primarySender != null && _primarySender.socket() == socket){
358
			_primarySender = null;
359
		}
367
	}
360
	}
368
	
361
	
369
	/**
362
	/**
Lines 380-392 Link Here
380
		document.setParent(null);
373
		document.setParent(null);
381
		//DataElement document = _dataStore.createObject(null, DataStoreResources.REQUEST_CLASS_TYPE, className);
374
		//DataElement document = _dataStore.createObject(null, DataStoreResources.REQUEST_CLASS_TYPE, className);
382
375
383
		synchronized (_senders){
376
		_primarySender.requestClass(document);	
384
			for (int j = 0; j < _senders.size(); j++)
385
			{
386
				Sender sender = (Sender) _senders.get(j);
387
				sender.requestClass(document);
388
			}
389
		}	
390
	}
377
	}
391
	
378
	
392
379
Lines 398-410 Link Here
398
		document.setPendingTransfer(true);
385
		document.setPendingTransfer(true);
399
		document.setParent(null);		
386
		document.setParent(null);		
400
387
401
		synchronized (_senders){
388
		_primarySender.sendRemoteClassRunnable(document, runnable);	
402
			for (int j = 0; j < _senders.size(); j++)
389
403
			{
404
				Sender sender = (Sender) _senders.get(j);
405
				sender.sendRemoteClassRunnable(document, runnable);
406
			}
407
		}
408
		notifyInput();
390
		notifyInput();
409
	}
391
	}
410
392
Lines 493-504 Link Here
493
	 */
475
	 */
494
	public void setGenerateBuffer(boolean flag)
476
	public void setGenerateBuffer(boolean flag)
495
	{
477
	{
496
		synchronized (_senders){
478
		_primarySender.setGenerateBuffer(flag);
497
			for (int i = 0; i < _senders.size(); i++)
498
			{
499
				Sender sender = (Sender)_senders.get(i);
500
				sender.setGenerateBuffer(flag);
501
			}
502
		}
503
	}
479
	}
504
}
480
}

Return to bug 404082