[jboss-svn-commits] JBL Code SVN: r20099 - labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed May 21 06:50:09 EDT 2008
Author: adinn
Date: 2008-05-21 06:50:09 -0400 (Wed, 21 May 2008)
New Revision: 20099
Modified:
labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/TwoPhaseCoordinator.java
Log:
added synchronization around uses of _synchs treeset under addSynch and beforeCompletion processing to guard against potential concurrent updates from client code. fix for JBTM-365
Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/TwoPhaseCoordinator.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/TwoPhaseCoordinator.java 2008-05-21 09:26:47 UTC (rev 20098)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/TwoPhaseCoordinator.java 2008-05-21 10:50:09 UTC (rev 20099)
@@ -145,12 +145,14 @@
return AddOutcome.AR_REJECTED;
}
}
-
+ // need to guard against synchs being added while we are performing beforeCompletion processing
+ synchronized (_synchs) {
if (_synchs.add(sr))
{
result = AddOutcome.AR_ADDED;
}
- }
+ }
+ }
break;
default:
break;
@@ -239,16 +241,21 @@
*/
int lastIndexProcessed = -1;
- SynchronizationRecord[] copiedSynchs = (SynchronizationRecord[])_synchs.toArray(new SynchronizationRecord[] {});
-
+ SynchronizationRecord[] copiedSynchs;
+ // need to guard against synchs being added while we are performing beforeCompletion processing
+ synchronized (_synchs) {
+ copiedSynchs = (SynchronizationRecord[])_synchs.toArray(new SynchronizationRecord[] {});
+ }
while( (lastIndexProcessed < _synchs.size()-1) && !problem) {
+ synchronized (_synchs) {
// if new Synchronization have been registered, refresh our copy of the collection:
if(copiedSynchs.length != _synchs.size()) {
copiedSynchs = (SynchronizationRecord[])_synchs.toArray(new SynchronizationRecord[] {});
}
+ }
- lastIndexProcessed = lastIndexProcessed+1;
+ lastIndexProcessed = lastIndexProcessed+1;
_currentRecord = copiedSynchs[lastIndexProcessed];
try
More information about the jboss-svn-commits
mailing list