diff options
author | Bernard Normier <bernard@zeroc.com> | 2007-07-06 15:14:06 -0400 |
---|---|---|
committer | Bernard Normier <bernard@zeroc.com> | 2007-07-06 15:14:06 -0400 |
commit | 3a5a3740e06b15d27badc3a000e174f01403bc60 (patch) | |
tree | 8ea1e9abebfd82e996b6b90cfcf635ff74c00bb9 /cpp/src | |
parent | AMD testing + AMD "rollback on user exception" fix (diff) | |
download | ice-3a5a3740e06b15d27badc3a000e174f01403bc60.tar.bz2 ice-3a5a3740e06b15d27badc3a000e174f01403bc60.tar.xz ice-3a5a3740e06b15d27badc3a000e174f01403bc60.zip |
AMD testing + minimal rollback on user exception support in AMD
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/Freeze/TransactionalEvictorContext.cpp | 14 | ||||
-rw-r--r-- | cpp/src/Freeze/TransactionalEvictorContext.h | 8 | ||||
-rw-r--r-- | cpp/src/Freeze/TransactionalEvictorI.cpp | 5 |
3 files changed, 25 insertions, 2 deletions
diff --git a/cpp/src/Freeze/TransactionalEvictorContext.cpp b/cpp/src/Freeze/TransactionalEvictorContext.cpp index 395203ed805..ac9466d017e 100644 --- a/cpp/src/Freeze/TransactionalEvictorContext.cpp +++ b/cpp/src/Freeze/TransactionalEvictorContext.cpp @@ -119,11 +119,23 @@ Freeze::TransactionalEvictorContext::checkDeadlockException() } } +bool +Freeze::TransactionalEvictorContext::clearUserException() +{ + bool result = _userExceptionDetected; + _userExceptionDetected = false; + return result; +} + bool -Freeze::TransactionalEvictorContext::response(bool) +Freeze::TransactionalEvictorContext::response(bool ok) { if(_owner == IceUtil::ThreadControl()) { + if(!ok) + { + _userExceptionDetected = true; + } return true; } else diff --git a/cpp/src/Freeze/TransactionalEvictorContext.h b/cpp/src/Freeze/TransactionalEvictorContext.h index f9bcb1aa375..12b2a2e8765 100644 --- a/cpp/src/Freeze/TransactionalEvictorContext.h +++ b/cpp/src/Freeze/TransactionalEvictorContext.h @@ -112,6 +112,8 @@ public: void checkDeadlockException(); + bool clearUserException(); + void commit(); void rollback(); @@ -145,12 +147,16 @@ private: bool _rollbackOnly; std::auto_ptr<DeadlockException> _deadlockException; - + // // Protected by this // bool _deadlockExceptionDetected; + // + // Not protected (used only by dispatch thread) + // + bool _userExceptionDetected; }; typedef IceUtil::Handle<TransactionalEvictorContext> TransactionalEvictorContextPtr; diff --git a/cpp/src/Freeze/TransactionalEvictorI.cpp b/cpp/src/Freeze/TransactionalEvictorI.cpp index f9629432ec6..eb359c22368 100644 --- a/cpp/src/Freeze/TransactionalEvictorI.cpp +++ b/cpp/src/Freeze/TransactionalEvictorI.cpp @@ -543,6 +543,11 @@ Freeze::TransactionalEvictorI::dispatch(Request& request) // May throw DeadlockException // ctx->checkDeadlockException(); + + if(ctx->clearUserException() && _rollbackOnUserException) + { + ctx->rollback(); + } } return dispatchStatus; |