You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ba...@apache.org on 2007/08/24 22:22:04 UTC
svn commit: r569511 -
/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/OutInAxisOperation.java
Author: barrettj
Date: Fri Aug 24 13:22:04 2007
New Revision: 569511
URL: http://svn.apache.org/viewvc?rev=569511&view=rev
Log:
Make initialization of the CallbackReceiver threadsafe
Modified:
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/OutInAxisOperation.java
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/OutInAxisOperation.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/OutInAxisOperation.java?rev=569511&r1=569510&r2=569511&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/OutInAxisOperation.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/OutInAxisOperation.java Fri Aug 24 13:22:04 2007
@@ -227,16 +227,21 @@
* We are following the async path. If the user hasn't set a callback object then we must
* block until the whole MEP is complete, as they have no other way to get their reply message.
*/
+ // THREADSAFE issue: Multiple threads could be trying to initialize the callback receiver
+ // so it is synchronized. It is not done within the else clause to avoid the
+ // double-checked lock antipattern.
CallbackReceiver callbackReceiver;
- if (axisOp.getMessageReceiver() != null &&
- axisOp.getMessageReceiver() instanceof CallbackReceiver) {
- callbackReceiver = (CallbackReceiver) axisOp.getMessageReceiver();
- } else {
- if (log.isDebugEnabled()) {
- log.debug("Creating new callback receiver");
+ synchronized (axisOp) {
+ if (axisOp.getMessageReceiver() != null &&
+ axisOp.getMessageReceiver() instanceof CallbackReceiver) {
+ callbackReceiver = (CallbackReceiver) axisOp.getMessageReceiver();
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("Creating new callback receiver");
+ }
+ callbackReceiver = new CallbackReceiver();
+ axisOp.setMessageReceiver(callbackReceiver);
}
- callbackReceiver = new CallbackReceiver();
- axisOp.setMessageReceiver(callbackReceiver);
}
SyncCallBack internalCallback = null;
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org