[jboss-svn-commits] JBL Code SVN: r26851 - labs/jbosstm/branches/JBOSSTS_4_2_3_GA_SP/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Jun 5 10:17:48 EDT 2009
Author: jhalliday
Date: 2009-06-05 10:17:48 -0400 (Fri, 05 Jun 2009)
New Revision: 26851
Modified:
labs/jbosstm/branches/JBOSSTS_4_2_3_GA_SP/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/TwoPhaseCoordinator.java
Log:
Backport _syncs concurrency handling fixes. JBTM-365
Modified: labs/jbosstm/branches/JBOSSTS_4_2_3_GA_SP/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/TwoPhaseCoordinator.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_2_3_GA_SP/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/TwoPhaseCoordinator.java 2009-06-05 14:16:42 UTC (rev 26850)
+++ labs/jbosstm/branches/JBOSSTS_4_2_3_GA_SP/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/coordinator/TwoPhaseCoordinator.java 2009-06-05 14:17:48 UTC (rev 26851)
@@ -143,11 +143,14 @@
}
}
- if (_synchs.add(sr))
- {
- result = AddOutcome.AR_ADDED;
- }
- }
+ // 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;
@@ -230,14 +233,20 @@
*/
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) {
- // if new Synchronization have been registered, refresh our copy of the collection:
- if(copiedSynchs.length != _synchs.size()) {
- copiedSynchs = (SynchronizationRecord[])_synchs.toArray(new SynchronizationRecord[] {});
- }
+ 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;
_currentRecord = copiedSynchs[lastIndexProcessed];
@@ -359,8 +368,10 @@
}
}
- _synchs = null;
- _currentRecord = null;
+ synchronized (_synchs) {
+ // nulling _syncs causes concurrency problems, so dispose contents instead:
+ _synchs.clear();
+ }
}
return !problem;
More information about the jboss-svn-commits
mailing list