[omniORB] Bug in RECOVER_FORWARD
Serguei Kolos
Serguei.Kolos at cern.ch
Fri Dec 12 18:38:00 GMT 2008
Hello
I have an impression that a bug has been introduced in the omniORB 4.1.3
to the handling of the exceptions in case of using reference forwarding.
The
new omniObjRef.cxx file defines the RECOVER_FORWARD macros as:
#define RECOVER_FORWARD do {\
omni::revertToOriginalProfile(this); \
CORBA::TRANSIENT ex2(TRANSIENT_FailedOnForwarded, ex.completed()); \
if( !_omni_callTransientExceptionHandler(this, retries++, ex2) ) \
throw; \
} while(0)
The issue is that in the line 790 it is used inside the
catch(const giopStream::CommFailure& ex) block and as a consequence if a
transient exception handler returns 0 the giopStream::CommFailure
exception is
propagated to the user space which must never happen.
What is the best way of solving this issue?
Cheers,
Sergei
PS: In the omniORB 4.0.7 it was working since the RECOVER_FORWARD was
throwing
ex2 exception instead of rethrowing the original one:
#define RECOVER_FORWARD do {\
omni::revertToOriginalProfile(this); \
CORBA::TRANSIENT ex2(TRANSIENT_FailedOnForwarded, ex.completed()); \
if( !_omni_callTransientExceptionHandler(this, retries++, ex2) ) \
throw ex2; \
} while(0)
More information about the omniORB-list
mailing list