From 854af2dbb1ee01f6e1c8d4f8f513ff2bad7da4f0 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 18 Aug 2010 17:52:02 +0200 Subject: Use TLS to store current transaction --- odb/transaction.cxx | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'odb/transaction.cxx') diff --git a/odb/transaction.cxx b/odb/transaction.cxx index df155ad..4fc730a 100644 --- a/odb/transaction.cxx +++ b/odb/transaction.cxx @@ -6,19 +6,23 @@ #include #include +#include + namespace odb { + using namespace details; + // // transaction // - static transaction* current_transaction = 0; + static ODB_TLS_POINTER (transaction) current_transaction; transaction:: transaction (transaction_impl* impl) : finilized_ (false), impl_ (impl) { - current_transaction = this; + tls_set (current_transaction, this); } transaction:: @@ -42,16 +46,18 @@ namespace odb bool transaction:: has_current () { - return current_transaction != 0; + return tls_get (current_transaction) != 0; } transaction& transaction:: current () { - if (current_transaction == 0) + transaction* cur (tls_get (current_transaction)); + + if (cur == 0) throw not_in_transaction (); - return *current_transaction; + return *cur; } void transaction:: @@ -61,7 +67,7 @@ namespace odb throw transaction_already_finilized (); finilized_ = true; - current_transaction = 0; + tls_set (current_transaction, 0); impl_->commit (); } @@ -72,7 +78,7 @@ namespace odb throw transaction_already_finilized (); finilized_ = true; - current_transaction = 0; + tls_set (current_transaction, 0); impl_->rollback (); } -- cgit v1.1