Author: rhs
Date: Thu Aug 15 16:31:22 2013
New Revision: 1514351
URL: http://svn.apache.org/r1514351
Log:
PROTON-393: fixed concurrent modification exception
Modified:
qpid/proton/trunk/proton-j/proton/src/main/java/org/apache/qpid/proton/messenger/impl/MessengerImpl.java
qpid/proton/trunk/tests/python/proton_tests/messenger.py
Modified:
qpid/proton/trunk/proton-j/proton/src/main/java/org/apache/qpid/proton/messenger/impl/MessengerImpl.java
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-j/proton/src/main/java/org/apache/qpid/proton/messenger/impl/MessengerImpl.java?rev=1514351&r1=1514350&r2=1514351&view=diff
==============================================================================
---
qpid/proton/trunk/proton-j/proton/src/main/java/org/apache/qpid/proton/messenger/impl/MessengerImpl.java
(original)
+++
qpid/proton/trunk/proton-j/proton/src/main/java/org/apache/qpid/proton/messenger/impl/MessengerImpl.java
Thu Aug 15 16:31:22 2013
@@ -23,8 +23,10 @@ package org.apache.qpid.proton.messenger
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
+import java.util.ArrayList;
import java.util.EnumSet;
import java.util.Iterator;
+import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -78,6 +80,7 @@ public class MessengerImpl implements Me
private int _distributed;
private TrackerQueue _incoming = new TrackerQueue();
private TrackerQueue _outgoing = new TrackerQueue();
+ private List<Connector> _awaitingDestruction = new ArrayList<Connector>();
/**
@@ -418,6 +421,15 @@ public class MessengerImpl implements Me
return size;
}
+ private void bringDestruction()
+ {
+ for (Connector<?> c : _awaitingDestruction)
+ {
+ c.destroy();
+ }
+ _awaitingDestruction.clear();
+ }
+
private void processAllConnectors()
{
distributeCredit();
@@ -435,6 +447,8 @@ public class MessengerImpl implements Me
}
processEndpoints(c);
}
+ bringDestruction();
+ distributeCredit();
}
private void processActive()
@@ -470,6 +484,8 @@ public class MessengerImpl implements Me
}
processEndpoints(c);
}
+ bringDestruction();
+ distributeCredit();
}
private void processEndpoints(Connector c)
@@ -527,11 +543,8 @@ public class MessengerImpl implements Me
if (c.isClosed())
{
+ _awaitingDestruction.add(c);
reclaimCredit(connection);
- c.destroy();
- // XXX: could we do this once at the end of the loop
- // instead of every time we reclaim?
- distributeCredit();
}
else
{
Modified: qpid/proton/trunk/tests/python/proton_tests/messenger.py
URL:
http://svn.apache.org/viewvc/qpid/proton/trunk/tests/python/proton_tests/messenger.py?rev=1514351&r1=1514350&r2=1514351&view=diff
==============================================================================
--- qpid/proton/trunk/tests/python/proton_tests/messenger.py (original)
+++ qpid/proton/trunk/tests/python/proton_tests/messenger.py Thu Aug 15
16:31:22 2013
@@ -48,17 +48,9 @@ class Test(common.Test):
self.client.start()
def _safelyStopClient(self):
- existing_exception = None
self.server.interrupt()
- try:
- self.client.stop()
- self.client = None
- except:
- print "Client failed to stop due to: %s" % sys.exc_info()[1]
- if existing_exception:
- raise existing_exception
- else:
- raise
+ self.client.stop()
+ self.client = None
def teardown(self):
try:
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]