Author: chamikara
Date: Thu Dec 20 22:41:39 2007
New Revision: 606115

URL: http://svn.apache.org/viewvc?rev=606115&view=rev
Log:
Fixed a bug in MakeConnectionProcessor.replyToPoll().
It was allowing two requests to manipulate the same response message 
simultaneously. Now we use wait, notify methods to avoid this scenario.

Modified:
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java
    
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/WorkerLock.java

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java?rev=606115&r1=606114&r2=606115&view=diff
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java
 Thu Dec 20 22:41:39 2007
@@ -53,7 +53,9 @@
 import org.apache.sandesha2.util.MsgInitializer;
 import org.apache.sandesha2.util.SandeshaUtil;
 import org.apache.sandesha2.util.SpecSpecificConstants;
+import org.apache.sandesha2.workers.SandeshaThread;
 import org.apache.sandesha2.workers.SenderWorker;
+import org.apache.sandesha2.workers.WorkerLock;
 import org.apache.sandesha2.wsrm.Address;
 import org.apache.sandesha2.wsrm.Identifier;
 import org.apache.sandesha2.wsrm.MakeConnection;
@@ -251,7 +253,28 @@
                                }
                        }
                }
+               
                if(continueSending){
+
+                       SandeshaThread sender = storageManager.getSender();
+                       WorkerLock lock = sender.getWorkerLock();
+                       
+                       String workId = matchingMessage.getMessageID();
+                       while (lock.isWorkPresent(workId)) {
+                               try {
+                                       //wait on the lock.
+                                       lock.wait();
+                               } catch (InterruptedException e) {
+                                       e.printStackTrace();
+                               }
+                       }
+                       
+                       SenderWorker worker = new SenderWorker 
(pollMessage.getConfigurationContext(), matchingMessage, 
pollMessage.getRMSpecVersion());
+                       worker.setLock(lock);
+                       worker.setWorkId(workId);
+
+                       lock.addWork(workId, worker);
+                       
                        setTransportProperties (returnMessage, pollMessage);
                        
                        // Link the response to the request
@@ -273,7 +296,7 @@
                        //This will allow Sandesha2 to consider both of 
following senarios equally.
                        //  1. A message being sent by the Sender thread.
                        //  2. A message being sent as a reply to an 
MakeConnection.
-                       SenderWorker worker = new SenderWorker 
(pollMessage.getConfigurationContext(), matchingMessage, 
pollMessage.getRMSpecVersion());
+       
                        worker.setMessage(returnRMMsg);
                        worker.run();                   
                        

Modified: 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/WorkerLock.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/WorkerLock.java?rev=606115&r1=606114&r2=606115&view=diff
==============================================================================
--- 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/WorkerLock.java
 (original)
+++ 
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/WorkerLock.java
 Thu Dec 20 22:41:39 2007
@@ -46,6 +46,10 @@
        public synchronized void removeWork (String work) {
                if(log.isDebugEnabled()) log.debug("Enter: 
WorkerLock::removeWork " + work);
                locks.remove(work);
+               
+               //wake up some thread that is waiting on this lock.
+               this.notify();
+               
                if(log.isDebugEnabled()) log.debug("Exit: 
WorkerLock::removeWork");
        }
        



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to