From c612a6c6200fd9a8f9830cbad062b30b465d3dfe Mon Sep 17 00:00:00 2001 From: Alan Conway Date: Mon, 18 Feb 2008 21:54:02 +0000 Subject: Fixed race condition in the examples: when a listener program prints its "ready" message, the commands it has sent to the broker may not yet be complete. This results in sporadic lost messages if the producer is started immediately (e.g. by a script.) - Added Session::sync(), wait till all commands to date have completed. - Call sync() before printing "ready" in listener example programs - Removed sleep from verify script git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@628875 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/client/ExecutionHandler.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'cpp/src/qpid/client/ExecutionHandler.cpp') diff --git a/cpp/src/qpid/client/ExecutionHandler.cpp b/cpp/src/qpid/client/ExecutionHandler.cpp index ba3cdce636..afdd13c9e9 100644 --- a/cpp/src/qpid/client/ExecutionHandler.cpp +++ b/cpp/src/qpid/client/ExecutionHandler.cpp @@ -26,6 +26,8 @@ #include "qpid/framing/AMQP_HighestVersion.h" #include "qpid/framing/all_method_bodies.h" #include "qpid/framing/ServerInvoker.h" +#include "qpid/client/FutureCompletion.h" +#include using namespace qpid::client; using namespace qpid::framing; @@ -252,3 +254,14 @@ void ExecutionHandler::setCompletionListener(boost::function l) { completionListener = l; } + + +void ExecutionHandler::syncWait(const SequenceNumber& id) { + syncTo(id); + FutureCompletion fc; + completion.listenForCompletion( + id, boost::bind(&FutureCompletion::completed, &fc) + ); + fc.waitForCompletion(); + assert(isCompleteUpTo(id)); +} -- cgit v1.2.1