You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2013/04/08 17:27:38 UTC
svn commit: r1465665 - in /activemq/activemq-cpp/trunk/activemq-cpp/src:
main/activemq/core/ test-integration/activemq/test/openwire/
Author: tabish
Date: Mon Apr 8 15:27:37 2013
New Revision: 1465665
URL: http://svn.apache.org/r1465665
Log:
fix and test for: https://issues.apache.org/jira/browse/AMQCPP-474
Modified:
activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp
activemq/activemq-cpp/trunk/activemq-cpp/src/test-integration/activemq/test/openwire/OpenwireTempDestinationTest.cpp
activemq/activemq-cpp/trunk/activemq-cpp/src/test-integration/activemq/test/openwire/OpenwireTempDestinationTest.h
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp?rev=1465665&r1=1465664&r2=1465665&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp Mon Apr 8 15:27:37 2013
@@ -1876,12 +1876,12 @@ void ActiveMQConnection::cleanUpTempDest
return;
}
- Pointer<Iterator<Pointer<ActiveMQTempDestination> > > iterator(this->config->activeTempDestinations.values().iterator());
+ ArrayList< Pointer<ActiveMQTempDestination> > tempDests(this->config->activeTempDestinations.values());
+ Pointer<Iterator<Pointer<ActiveMQTempDestination> > > iterator(tempDests.iterator());
while (iterator->hasNext()) {
Pointer<ActiveMQTempDestination> dest = iterator->next();
try {
-
// Only delete this temporary destination if it was created from this connection, since the
// advisory consumer tracks all temporary destinations there can be others in our mapping that
// this connection did not create.
@@ -1890,7 +1890,6 @@ void ActiveMQConnection::cleanUpTempDest
if (dest->getConnectionId() == thisConnectionId) {
this->deleteTempDestination(dest);
}
-
} catch (Exception& ex) {
}
}
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/test-integration/activemq/test/openwire/OpenwireTempDestinationTest.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/test-integration/activemq/test/openwire/OpenwireTempDestinationTest.cpp?rev=1465665&r1=1465664&r2=1465665&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/test-integration/activemq/test/openwire/OpenwireTempDestinationTest.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/test-integration/activemq/test/openwire/OpenwireTempDestinationTest.cpp Mon Apr 8 15:27:37 2013
@@ -24,6 +24,7 @@
#include <decaf/util/ArrayList.h>
#include <activemq/exceptions/ActiveMQException.h>
#include <activemq/core/ActiveMQConnectionFactory.h>
+#include <decaf/util/ArrayList.h>
using namespace std;
using namespace cms;
@@ -38,9 +39,9 @@ using namespace decaf::util;
using namespace decaf::util::concurrent;
using namespace decaf::lang;
-namespace activemq{
-namespace test{
-namespace openwire{
+namespace activemq {
+namespace test {
+namespace openwire {
class Requester : public cms::MessageListener,
public decaf::lang::Runnable {
@@ -414,3 +415,22 @@ void OpenwireTempDestinationTest::testDe
queue->destroy(),
CMSException);
}
+
+///////////////////////////////////////////////////////////////////////////////
+void OpenwireTempDestinationTest::testCloseConnectionWithManyTempDests() {
+
+ ArrayList< Pointer<TemporaryQueue> > tempQueues;
+ ArrayList< Pointer<MessageProducer> > producers;
+
+ for (int i = 0; i < 25; ++i) {
+ Pointer<TemporaryQueue> tempQueue(cmsProvider->getSession()->createTemporaryQueue());
+ tempQueues.add(tempQueue);
+ Pointer<MessageProducer> producer(cmsProvider->getSession()->createProducer(tempQueue.get()));
+ producers.add(producer);
+ }
+
+ cmsProvider->getConnection()->close();
+
+ tempQueues.clear();
+ producers.clear();
+}
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/test-integration/activemq/test/openwire/OpenwireTempDestinationTest.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/test-integration/activemq/test/openwire/OpenwireTempDestinationTest.h?rev=1465665&r1=1465664&r2=1465665&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/test-integration/activemq/test/openwire/OpenwireTempDestinationTest.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/test-integration/activemq/test/openwire/OpenwireTempDestinationTest.h Mon Apr 8 15:27:37 2013
@@ -36,6 +36,7 @@ namespace openwire{
CPPUNIT_TEST( testPublishFailsForClosedConnection );
CPPUNIT_TEST( testPublishFailsForDestoryedTempDestination );
CPPUNIT_TEST( testDeleteDestinationWithSubscribersFails );
+ CPPUNIT_TEST( testCloseConnectionWithManyTempDests );
CPPUNIT_TEST_SUITE_END();
public:
@@ -52,6 +53,7 @@ namespace openwire{
void testPublishFailsForClosedConnection();
void testPublishFailsForDestoryedTempDestination();
void testDeleteDestinationWithSubscribersFails();
+ void testCloseConnectionWithManyTempDests();
virtual std::string getBrokerURL() const {
return activemq::util::IntegrationCommon::getInstance().getOpenwireURL();