summaryrefslogtreecommitdiff
path: root/cpp/src/Freeze/TransactionalEvictorContext.cpp
diff options
context:
space:
mode:
authorBernard Normier <bernard@zeroc.com>2008-01-10 18:41:54 -0500
committerBernard Normier <bernard@zeroc.com>2008-01-10 18:41:54 -0500
commit82367018dd548cc1bc166547f59ce14433275d2f (patch)
tree0087a572a88d3f7b4ed4df44205ec94fdbaa508a /cpp/src/Freeze/TransactionalEvictorContext.cpp
parentFixed bugs 2625 and 2627 (diff)
downloadice-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.cpp19
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
+
}