Author: aidan
Date: Mon Apr 21 04:13:52 2008
New Revision: 650099
URL: http://svn.apache.org/viewvc?rev=650099&view=rev
Log:
QPID-832 Make sure that we lock early enough to avoid deadlocks hwen closing
Modified:
incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java
Modified:
incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java
URL:
http://svn.apache.org/viewvc/incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java?rev=650099&r1=650098&r2=650099&view=diff
==============================================================================
---
incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java
(original)
+++
incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java
Mon Apr 21 04:13:52 2008
@@ -913,31 +913,31 @@
{
synchronized(_sessionCreationLock)
{
- if(!sessions.isEmpty())
- {
- AMQSession session = sessions.remove(0);
- synchronized(session.getMessageDeliveryLock())
- {
- close(sessions, timeout);
- }
- }
- else
+ synchronized (getFailoverMutex())
{
if (!_closed.getAndSet(true))
{
- synchronized (getFailoverMutex())
+ if(!sessions.isEmpty())
+ {
+ AMQSession session = sessions.remove(0);
+ synchronized(session.getMessageDeliveryLock())
+ {
+ close(sessions, timeout);
+ }
+ }
+ else
{
try
{
long startCloseTime = System.currentTimeMillis();
- closeAllSessions(null, timeout, startCloseTime);
+ closeAllSessions(null, timeout, startCloseTime);
- //This MUST occur after we have successfully closed
all Channels/Sessions
- _taskPool.shutdown();
+ //This MUST occur after we have successfully
closed all Channels/Sessions
+ _taskPool.shutdown();
- if (!_taskPool.isTerminated())
- {
+ if (!_taskPool.isTerminated())
+ {
try
{
// adjust timeout