summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/qpid/client/Dispatcher.cpp5
-rw-r--r--cpp/src/qpid/client/Dispatcher.h1
-rw-r--r--cpp/src/qpid/client/SubscriptionManager.cpp5
-rw-r--r--cpp/src/qpid/client/SubscriptionManager.h5
-rw-r--r--cpp/src/tests/ClientSessionTest.cpp4
5 files changed, 18 insertions, 2 deletions
diff --git a/cpp/src/qpid/client/Dispatcher.cpp b/cpp/src/qpid/client/Dispatcher.cpp
index da6607fb9e..59bc265bd2 100644
--- a/cpp/src/qpid/client/Dispatcher.cpp
+++ b/cpp/src/qpid/client/Dispatcher.cpp
@@ -54,6 +54,11 @@ void Dispatcher::start()
worker = Thread(this);
}
+void Dispatcher::wait()
+{
+ worker.join();
+}
+
void Dispatcher::run()
{
Mutex::ScopedLock l(lock);
diff --git a/cpp/src/qpid/client/Dispatcher.h b/cpp/src/qpid/client/Dispatcher.h
index 921c6449a3..e84f8f303d 100644
--- a/cpp/src/qpid/client/Dispatcher.h
+++ b/cpp/src/qpid/client/Dispatcher.h
@@ -63,6 +63,7 @@ public:
Dispatcher(const Session& session, const std::string& queue = "");
void start();
+ void wait();
void run();
void stop();
void setAutoStop(bool b);
diff --git a/cpp/src/qpid/client/SubscriptionManager.cpp b/cpp/src/qpid/client/SubscriptionManager.cpp
index 7445202ec3..c91ae178ac 100644
--- a/cpp/src/qpid/client/SubscriptionManager.cpp
+++ b/cpp/src/qpid/client/SubscriptionManager.cpp
@@ -92,6 +92,11 @@ void SubscriptionManager::start()
dispatcher.start();
}
+void SubscriptionManager::wait()
+{
+ dispatcher.wait();
+}
+
void SubscriptionManager::stop()
{
dispatcher.stop();
diff --git a/cpp/src/qpid/client/SubscriptionManager.h b/cpp/src/qpid/client/SubscriptionManager.h
index 58d880fa83..948126e271 100644
--- a/cpp/src/qpid/client/SubscriptionManager.h
+++ b/cpp/src/qpid/client/SubscriptionManager.h
@@ -210,6 +210,11 @@ class SubscriptionManager : public sys::Runnable
* @see start
*/
void start();
+
+ /**
+ * Wait for the thread started by a call to start() to complete.
+ */
+ void wait();
/** If set true, run() will stop when all subscriptions
* are cancelled. If false, run will only stop when stop()
diff --git a/cpp/src/tests/ClientSessionTest.cpp b/cpp/src/tests/ClientSessionTest.cpp
index cca16bd9f8..43c12ddf5c 100644
--- a/cpp/src/tests/ClientSessionTest.cpp
+++ b/cpp/src/tests/ClientSessionTest.cpp
@@ -306,7 +306,7 @@ QPID_AUTO_TEST_CASE(testRelease) {
}
fix.subs.setAutoStop(false);
- sys::Thread runner(fix.subs);//start dispatcher thread
+ fix.subs.start();
SubscriptionSettings settings;
settings.autoAck = 0;
@@ -330,7 +330,7 @@ QPID_AUTO_TEST_CASE(testRelease) {
}
fix.subs.stop();
- runner.join();
+ fix.subs.wait();
fix.session.close();
}