summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker/TxBuffer.cpp
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2007-04-19 17:56:21 +0000
committerGordon Sim <gsim@apache.org>2007-04-19 17:56:21 +0000
commitb1ad015fe2670bc3e5471c5e350e243cca948dcf (patch)
treecbbae911b59a34f7cbe998609ca9d14f8984ca37 /cpp/src/qpid/broker/TxBuffer.cpp
parente7cc3594288f5a6ed6c6565e34413823f5b8e2d8 (diff)
downloadqpid-python-b1ad015fe2670bc3e5471c5e350e243cca948dcf.tar.gz
Some dtx related updates.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@530500 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/broker/TxBuffer.cpp')
-rw-r--r--cpp/src/qpid/broker/TxBuffer.cpp23
1 files changed, 17 insertions, 6 deletions
diff --git a/cpp/src/qpid/broker/TxBuffer.cpp b/cpp/src/qpid/broker/TxBuffer.cpp
index c526c88c25..5b5b00e929 100644
--- a/cpp/src/qpid/broker/TxBuffer.cpp
+++ b/cpp/src/qpid/broker/TxBuffer.cpp
@@ -24,17 +24,13 @@
using boost::mem_fn;
using namespace qpid::broker;
-bool TxBuffer::prepare(TransactionalStore* const store)
+bool TxBuffer::prepare(TransactionContext* const ctxt)
{
- std::auto_ptr<TransactionContext> ctxt;
- if(store) ctxt = store->begin();
for(op_iterator i = ops.begin(); i < ops.end(); i++){
- if(!(*i)->prepare(ctxt.get())){
- if(store) store->abort(*ctxt);
+ if(!(*i)->prepare(ctxt)){
return false;
}
}
- if(store) store->commit(*ctxt);
return true;
}
@@ -54,3 +50,18 @@ void TxBuffer::enlist(TxOp::shared_ptr op)
{
ops.push_back(op);
}
+
+bool TxBuffer::commitLocal(TransactionalStore* const store)
+{
+ std::auto_ptr<TransactionContext> ctxt;
+ if(store) ctxt = store->begin();
+ if (prepare(ctxt.get())) {
+ if(store) store->commit(*ctxt);
+ commit();
+ return true;
+ } else {
+ if(store) store->abort(*ctxt);
+ rollback();
+ return false;
+ }
+}