[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