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]