diff options
author | Bernard Normier <bernard@zeroc.com> | 2008-01-10 18:41:54 -0500 |
---|---|---|
committer | Bernard Normier <bernard@zeroc.com> | 2008-01-10 18:41:54 -0500 |
commit | 82367018dd548cc1bc166547f59ce14433275d2f (patch) | |
tree | 0087a572a88d3f7b4ed4df44205ec94fdbaa508a /cpp/src/Freeze/TransactionalEvictorContext.cpp | |
parent | Fixed bugs 2625 and 2627 (diff) | |
download | ice-82367018dd548cc1bc166547f59ce14433275d2f.tar.bz2 ice-82367018dd548cc1bc166547f59ce14433275d2f.tar.xz ice-82367018dd548cc1bc166547f59ce14433275d2f.zip |
Fixed bug #2626
Diffstat (limited to 'cpp/src/Freeze/TransactionalEvictorContext.cpp')
-rw-r--r-- | cpp/src/Freeze/TransactionalEvictorContext.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/cpp/src/Freeze/TransactionalEvictorContext.cpp b/cpp/src/Freeze/TransactionalEvictorContext.cpp index 9d88aeef073..d58dcec4986 100644 --- a/cpp/src/Freeze/TransactionalEvictorContext.cpp +++ b/cpp/src/Freeze/TransactionalEvictorContext.cpp @@ -272,6 +272,15 @@ Freeze::TransactionalEvictorContext::ServantHolder::ServantHolder() : Freeze::TransactionalEvictorContext::ServantHolder::~ServantHolder() { +#ifdef __HP_aCC +// +// The HP aCC compiler has a tendency to run dtors several times when an exception is raised: +// a very nasty bug! +// + try + { +#endif + if(_ownBody && _body.ownServant) { const TransactionalEvictorContextPtr& ctx = *(_body.ctx); @@ -292,6 +301,16 @@ Freeze::TransactionalEvictorContext::ServantHolder::~ServantHolder() } ctx->_stack.pop_front(); } +#ifdef __HP_aCC + _body.rec.servant = 0; + } + catch(...) + { + _body.rec.servant = 0; + throw; + } +#endif + } |