diff options
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/Freeze/TransactionI.cpp | 5 | ||||
-rw-r--r-- | cpp/src/Freeze/TransactionalEvictorI.cpp | 13 |
2 files changed, 16 insertions, 2 deletions
diff --git a/cpp/src/Freeze/TransactionI.cpp b/cpp/src/Freeze/TransactionI.cpp index ac595af5120..4f1a04253de 100644 --- a/cpp/src/Freeze/TransactionI.cpp +++ b/cpp/src/Freeze/TransactionI.cpp @@ -270,7 +270,10 @@ Freeze::TransactionI::postCompletion(bool committed, bool deadlock) if(_postCompletionCallback != 0) { - _postCompletionCallback->postCompletion(committed, deadlock); + PostCompletionCallbackPtr cb = _postCompletionCallback; + _postCompletionCallback = 0; + + cb->postCompletion(committed, deadlock); } ConnectionIPtr connection = _connection; diff --git a/cpp/src/Freeze/TransactionalEvictorI.cpp b/cpp/src/Freeze/TransactionalEvictorI.cpp index e2798be89da..ab3d61444f8 100644 --- a/cpp/src/Freeze/TransactionalEvictorI.cpp +++ b/cpp/src/Freeze/TransactionalEvictorI.cpp @@ -625,7 +625,7 @@ Freeze::TransactionalEvictorI::dispatch(Request& request) } // - // Can be reached + // Can't be reached // assert(0); throw OperationNotExistException(__FILE__, __LINE__); @@ -637,6 +637,17 @@ Freeze::TransactionalEvictorI::deactivate(const string&) { if(_deactivateController.deactivate()) { + { + Lock sync(*this); + + // + // Set the evictor size to zero, meaning that we will evict + // everything possible. + // + _evictorSize = 0; + evict(); + } + // // Break cycle // |