[prev in list] [next in list] [prev in thread] [next in thread] 

List:       sandesha-dev
Subject:    svn commit: r557671 - in
From:       gatfora () apache ! org
Date:       2007-07-19 16:12:21
Message-ID: 20070719161221.8AA071A981D () eris ! apache ! org
[Download RAW message or body]

Author: gatfora
Date: Thu Jul 19 09:12:20 2007
New Revision: 557671

URL: http://svn.apache.org/viewvc?view=rev&rev=557671
Log:
Fix deadlock when piggybacking Acks where the SenderBean and RmdBean locks are taken \
in the wrong order

Modified:
    webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/AcknowledgementManager.java
  webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/SenderWorker.java


Modified: webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/AcknowledgementManager.java
                
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/mai \
n/java/org/apache/sandesha2/util/AcknowledgementManager.java?view=diff&rev=557671&r1=557670&r2=557671
 ==============================================================================
--- webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/AcknowledgementManager.java \
                (original)
+++ webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/AcknowledgementManager.java \
Thu Jul 19 09:12:20 2007 @@ -39,6 +39,7 @@
 import org.apache.sandesha2.i18n.SandeshaMessageHelper;
 import org.apache.sandesha2.i18n.SandeshaMessageKeys;
 import org.apache.sandesha2.storage.StorageManager;
+import org.apache.sandesha2.storage.Transaction;
 import org.apache.sandesha2.storage.beanmanagers.SenderBeanMgr;
 import org.apache.sandesha2.storage.beans.RMDBean;
 import org.apache.sandesha2.storage.beans.SenderBean;
@@ -58,7 +59,7 @@
 	 * @param applicationRMMsgContext
 	 * @throws SandeshaException
 	 */
-	public static void piggybackAcksIfPresent(RMMsgContext rmMessageContext, \
StorageManager storageManager) +	public static Transaction \
piggybackAcksIfPresent(RMMsgContext rmMessageContext, StorageManager storageManager, \
Transaction transaction)  throws SandeshaException {
 		if (log.isDebugEnabled())
 			log.debug("Enter: AcknowledgementManager::piggybackAcksIfPresent");
@@ -103,7 +104,7 @@
 				}
 			}
 			if(log.isDebugEnabled()) log.debug("Exit: \
                AcknowledgementManager::piggybackAcksIfPresent, anon");
-			return;
+			return transaction;
 		}
 		
 		// From here on, we must be dealing with a real address. Piggyback all sequences \
that have an @@ -115,6 +116,12 @@
 		findBean.setToAddress(target.getAddress());
 
 		Collection collection = retransmitterBeanMgr.find(findBean);
+		
+		if (transaction != null && transaction.isActive())
+			transaction.commit();
+		
+		transaction = storageManager.getTransaction();
+		
 		Iterator it = collection.iterator();
 		while (it.hasNext()) {
 			SenderBean ackBean = (SenderBean) it.next();
@@ -162,6 +169,7 @@
 		
 		if (log.isDebugEnabled())
 			log.debug("Exit: AcknowledgementManager::piggybackAcksIfPresent");
+		return transaction;
 	}
 
 	/**

Modified: webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/SenderWorker.java
                
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/mai \
n/java/org/apache/sandesha2/workers/SenderWorker.java?view=diff&rev=557671&r1=557670&r2=557671
 ==============================================================================
--- webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/SenderWorker.java \
                (original)
+++ webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/SenderWorker.java \
Thu Jul 19 09:12:20 2007 @@ -183,8 +183,12 @@
 			int messageType = senderBean.getMessageType();
 			
 			if (isAckPiggybackableMsgType(messageType)) {
+				// Commit the update
+				if(transaction != null && transaction.isActive()) transaction.commit();
+				transaction = storageManager.getTransaction();
+
 				// Piggyback ack messages based on the 'To' address of the message
-				AcknowledgementManager.piggybackAcksIfPresent(rmMsgCtx, storageManager);
+				transaction = AcknowledgementManager.piggybackAcksIfPresent(rmMsgCtx, \
storageManager, transaction);  }
 
 			// sending the message



---------------------------------------------------------------------
To unsubscribe, e-mail: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic