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/main/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/main/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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]