[jboss-svn-commits] JBL Code SVN: r35235 - labs/jbosstm/trunk/XTS/WS-T/dev/src11/com/arjuna/wst11/messaging/engines.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Sep 22 10:01:39 EDT 2010
Author: adinn
Date: 2010-09-22 10:01:38 -0400 (Wed, 22 Sep 2010)
New Revision: 35235
Modified:
labs/jbosstm/trunk/XTS/WS-T/dev/src11/com/arjuna/wst11/messaging/engines/CoordinatorCompletionCoordinatorEngine.java
Log:
dealt with race condition which was stopping cannotComplete calls working underneath a coordinator completion participant complete callback - fixes JBTM-792
Modified: labs/jbosstm/trunk/XTS/WS-T/dev/src11/com/arjuna/wst11/messaging/engines/CoordinatorCompletionCoordinatorEngine.java
===================================================================
--- labs/jbosstm/trunk/XTS/WS-T/dev/src11/com/arjuna/wst11/messaging/engines/CoordinatorCompletionCoordinatorEngine.java 2010-09-22 13:36:49 UTC (rev 35234)
+++ labs/jbosstm/trunk/XTS/WS-T/dev/src11/com/arjuna/wst11/messaging/engines/CoordinatorCompletionCoordinatorEngine.java 2010-09-22 14:01:38 UTC (rev 35235)
@@ -438,19 +438,30 @@
synchronized(this)
{
current = state ;
- if ((current == State.STATE_ACTIVE) || (current == State.STATE_CANCELING_ACTIVE) ||
- (current == State.STATE_CANCELING_COMPLETING) || (current == State.STATE_COMPLETING))
+ if ((current == State.STATE_ACTIVE) ||
+ (current == State.STATE_CANCELING_ACTIVE) ||
+ (current == State.STATE_CANCELING_COMPLETING))
{
changeState(State.STATE_NOT_COMPLETING) ;
}
+ else if (current == State.STATE_COMPLETING)
+ {
+ // ending now avoids a race condition similar to the one for a fail message
+ // we set a failure state which ensures that any waiting coordinator detects
+ // that the complete has failed
+ failureState = State.STATE_NOT_COMPLETING;
+ ended();
+ }
}
- if ((current == State.STATE_ACTIVE) || (current == State.STATE_CANCELING_ACTIVE) ||
- (current == State.STATE_CANCELING_COMPLETING) || (current == State.STATE_COMPLETING))
+ if ((current == State.STATE_ACTIVE) ||
+ (current == State.STATE_CANCELING_ACTIVE) ||
+ (current == State.STATE_CANCELING_COMPLETING))
{
+ // we need to make sure the coordinator marks the participant as not completing
executeCannotComplete() ;
}
- else if (current == State.STATE_ENDED)
+ else if ((current == State.STATE_COMPLETING) || (current == State.STATE_ENDED))
{
sendNotCompleted() ;
}
@@ -642,9 +653,16 @@
if (current == State.STATE_ACTIVE)
{
sendComplete() ;
- return waitForState(State.STATE_COMPLETING, TransportTimer.getTransportTimeout()) ;
+ waitForState(State.STATE_COMPLETING, TransportTimer.getTransportTimeout()) ;
}
- return current ;
+
+ synchronized(this) {
+ if (state == State.STATE_ENDED && failureState != null) {
+ return failureState;
+ }
+
+ return state;
+ }
}
/**
More information about the jboss-svn-commits
mailing list