summaryrefslogtreecommitdiff
path: root/qpid/cpp/src/qpid/client/SessionBase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/cpp/src/qpid/client/SessionBase.cpp')
-rw-r--r--qpid/cpp/src/qpid/client/SessionBase.cpp29
1 files changed, 23 insertions, 6 deletions
diff --git a/qpid/cpp/src/qpid/client/SessionBase.cpp b/qpid/cpp/src/qpid/client/SessionBase.cpp
index 0e1fa67bda..d6a7571e9f 100644
--- a/qpid/cpp/src/qpid/client/SessionBase.cpp
+++ b/qpid/cpp/src/qpid/client/SessionBase.cpp
@@ -19,6 +19,7 @@
*
*/
#include "SessionBase.h"
+#include "qpid/framing/all_method_bodies.h"
namespace qpid {
namespace client {
@@ -26,7 +27,7 @@ using namespace framing;
SessionBase::SessionBase() {}
SessionBase::~SessionBase() {}
-SessionBase::SessionBase(shared_ptr<SessionCore> core) : impl(core) {}
+SessionBase::SessionBase(shared_ptr<SessionImpl> core) : impl(core) {}
void SessionBase::suspend() { impl->suspend(); }
void SessionBase::close() { impl->close(); }
@@ -37,14 +38,30 @@ SynchronousMode SessionBase::getSynchronous() const {
return SynchronousMode(impl->isSync());
}
-Execution& SessionBase::getExecution() { return impl->getExecution(); }
+Execution& SessionBase::getExecution()
+{
+ return *impl;
+}
+
+void SessionBase::sync()
+{
+ ExecutionSyncBody b;
+ b.setSync(true);
+ impl->send(b).wait(*impl);
+}
+
Uuid SessionBase::getId() const { return impl->getId(); }
framing::FrameSet::shared_ptr SessionBase::get() { return impl->get(); }
-void SessionBase::sync() {
- Execution& ex = getExecution();
- ex.syncWait(ex.lastSent());
- impl->assertOpen();
+SessionBase::ScopedSync::ScopedSync(SessionBase& s) : session(s), change(!s.isSynchronous())
+{
+ if (change) session.setSynchronous(true);
}
+SessionBase::ScopedSync::~ScopedSync()
+{
+ if (change) session.setSynchronous(false);
+}
+
+
}} // namespace qpid::client