Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 245038 Details for
Bug 404082
[dstore] race condition on finish, removing senders
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
updated patch
org.eclipse.tm.patch (text/plain), 7.45 KB, created by
David McKnight
on 2014-07-14 11:35:17 EDT
(
hide
)
Description:
updated patch
Filename:
MIME Type:
Creator:
David McKnight
Created:
2014-07-14 11:35:17 EDT
Size:
7.45 KB
patch
obsolete
>diff --git a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/server/ConnectionEstablisher.java b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/server/ConnectionEstablisher.java >index b08c071..b9f47f0 100644 >--- a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/server/ConnectionEstablisher.java >+++ b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/server/ConnectionEstablisher.java >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2002, 2012 IBM Corporation and others. >+ * Copyright (c) 2002, 2014 IBM Corporation and others. > * All rights reserved. This program and the accompanying materials > * are made available under the terms of the Eclipse Public License v1.0 > * which accompanies this distribution, and is available at >@@ -31,6 +31,7 @@ > * David McKnight (IBM) - [378136] [dstore] miner.finish is stuck > * David McKnight (IBM) - [388472] [dstore] need alternative option for getting at server hostname > * David McKnight (IBM) - [390681] [dstore] need to merge differences between HEAD stream and 3.2 in ConnectionEstablisher.finished() >+ * David McKnight (IBM) [439545][dstore] potential deadlock on senders during shutdown > *******************************************************************************/ > > package org.eclipse.dstore.core.server; >@@ -224,11 +225,7 @@ > if (_dataStore.getClient() != null) { > _dataStore.getClient().getLogger().logInfo(this.getClass().toString(), "ConnectionEstablisher.finished()"); //$NON-NLS-1$ > } >- if (_dataStore.getClient() != null) { >- _dataStore.getClient().getLogger().logInfo(this.getClass().toString(), "ConnectionEstablisher - removing sender"); //$NON-NLS-1$ >- } >- _updateHandler.removeSenderWith(receiver.socket()); >- >+ > if (_dataStore.getClient() != null) { > _dataStore.getClient().getLogger().logInfo(this.getClass().toString(), "ConnectionEstablisher - removing receiver"); //$NON-NLS-1$ > } >@@ -249,6 +246,12 @@ > _updateHandler.finish(); > > if (_dataStore.getClient() != null) { >+ _dataStore.getClient().getLogger().logInfo(this.getClass().toString(), "ConnectionEstablisher - removing sender"); //$NON-NLS-1$ >+ } >+ _updateHandler.removeSenderWith(receiver.socket()); >+ >+ >+ if (_dataStore.getClient() != null) { > _dataStore.getClient().getLogger().logInfo(this.getClass().toString(), "ConnectionEstablisher - finishing DataStore"); //$NON-NLS-1$ > } > _dataStore.finish(); >diff --git a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/server/ServerUpdateHandler.java b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/server/ServerUpdateHandler.java >index 724751b..0932ff2 100644 >--- a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/server/ServerUpdateHandler.java >+++ b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/internal/core/server/ServerUpdateHandler.java >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2002, 2013 IBM Corporation and others. >+ * Copyright (c) 2002, 2014 IBM Corporation and others. > * All rights reserved. This program and the accompanying materials > * are made available under the terms of the Eclipse Public License v1.0 > * which accompanies this distribution, and is available at >@@ -18,6 +18,7 @@ > * David McKnight (IBM) - [358301] [DSTORE] Hang during debug source look up > * David McKnight (IBM) [388873][dstore] ServerUpdateHandler _senders list should be synchronized > * David McKnight (IBM) [404082][dstore] race condition on finish, removing senders >+ * David McKnight (IBM) [439545][dstore] potential deadlock on senders during shutdown > *******************************************************************************/ > > package org.eclipse.dstore.internal.core.server; >@@ -41,6 +42,7 @@ > public class ServerUpdateHandler extends UpdateHandler > { > >+ private Sender _primarySender; // there should really only be one > > private ArrayList _senders; > private CommandGenerator _commandGenerator; >@@ -164,6 +166,7 @@ > synchronized(_senders){ > _senders.add(sender); > } >+ _primarySender = sender; > } > > /** >@@ -174,6 +177,9 @@ > { > synchronized (_senders){ > _senders.remove(sender); >+ } >+ if (sender == _primarySender){ >+ _primarySender = null; > } > if (_senders.size() == 0) > { >@@ -213,14 +219,8 @@ > document.setAttribute(DE.A_SOURCE, path); > document.setPendingTransfer(true); > document.setParent(null); >- >- synchronized (_senders){ >- for (int j = 0; j < _senders.size(); j++) >- { >- Sender sender = (Sender) _senders.get(j); >- sender.sendFile(document, bytes, size, binary); >- } >- } >+ >+ _primarySender.sendFile(document, bytes, size, binary); > } > > /** >@@ -254,13 +254,8 @@ > document.setAttribute(DE.A_SOURCE, path); > document.setPendingTransfer(true); > document.setParent(null); >- synchronized (_senders){ >- for (int j = 0; j < _senders.size(); j++) >- { >- Sender sender = (Sender) _senders.get(j); >- sender.sendAppendFile(document, bytes, size, binary); >- } >- } >+ >+ _primarySender.sendAppendFile(document, bytes, size, binary); > } > > >@@ -296,23 +291,18 @@ > > _commandGenerator.generateResponse(document, _dataObjects); > >- synchronized (_senders){ >- for (int j = 0; j < _senders.size(); j++) >- { >- Sender sender = (Sender) _senders.get(j); >- sender.sendDocument(document, 5); >- if (_pendingKeepAliveConfirmation != null) >- { >- sender.sendKeepAliveConfirmation(_pendingKeepAliveConfirmation); >- _pendingKeepAliveConfirmation = null; >- } >- if (_pendingKeepAliveRequest != null) >- { >- sender.sendKeepAliveRequest(_pendingKeepAliveRequest); >- _pendingKeepAliveRequest = null; >- } >- } >+ _primarySender.sendDocument(document, 20); >+ if (_pendingKeepAliveConfirmation != null) >+ { >+ _primarySender.sendKeepAliveConfirmation(_pendingKeepAliveConfirmation); >+ _pendingKeepAliveConfirmation = null; > } >+ if (_pendingKeepAliveRequest != null) >+ { >+ _primarySender.sendKeepAliveRequest(_pendingKeepAliveRequest); >+ _pendingKeepAliveRequest = null; >+ } >+ > > for (int i = 0; i < _dataObjects.size(); i++) > { >@@ -363,7 +353,10 @@ > sender.sendDocument(document, 2); > removeSender(sender); > } >- } >+ } >+ if (_primarySender != null && _primarySender.socket() == socket){ >+ _primarySender = null; >+ } > } > > /** >@@ -380,13 +373,7 @@ > document.setParent(null); > //DataElement document = _dataStore.createObject(null, DataStoreResources.REQUEST_CLASS_TYPE, className); > >- synchronized (_senders){ >- for (int j = 0; j < _senders.size(); j++) >- { >- Sender sender = (Sender) _senders.get(j); >- sender.requestClass(document); >- } >- } >+ _primarySender.requestClass(document); > } > > >@@ -398,13 +385,8 @@ > document.setPendingTransfer(true); > document.setParent(null); > >- synchronized (_senders){ >- for (int j = 0; j < _senders.size(); j++) >- { >- Sender sender = (Sender) _senders.get(j); >- sender.sendRemoteClassRunnable(document, runnable); >- } >- } >+ _primarySender.sendRemoteClassRunnable(document, runnable); >+ > notifyInput(); > } > >@@ -493,12 +475,6 @@ > */ > public void setGenerateBuffer(boolean flag) > { >- synchronized (_senders){ >- for (int i = 0; i < _senders.size(); i++) >- { >- Sender sender = (Sender)_senders.get(i); >- sender.setGenerateBuffer(flag); >- } >- } >+ _primarySender.setGenerateBuffer(flag); > } > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 404082
:
228888
| 245038