[prev in list] [next in list] [prev in thread] [next in thread] 

List:       omniorb-list
Subject:    [omniORB] Missing "else" statement in omniORB 4.1.4 retry handling?
From:       Peter Klotz <peter.klotz () aon ! at>
Date:       2010-07-28 16:21:59
Message-ID: 4C505927.3030409 () aon ! at
[Download RAW message or body]

Hello Duncan

The attached patch (against SVN trunk) adds an "else" statement that in 
our opinion got lost in omniORB 4.1.4 in this checkin (file omniObjRef.cc):

   Revision 1.4.2.7  2008/10/28 15:54:51  dgrisby
   Internal CommFailure exception escapes after failed-on-forward call
   that is not retried.


There were two identical code blocks in omniORB 4.1.3 that were altered 
by the above checkin. In omniORB 4.1.4 a diff shows that the "else" 
statement misses in one of the blocks.

The erroneous behavior we are seeing is this:

* Client contacts Naming Service and establishes a connection
* Later the Naming Service closes the connection due to its 
inConScanPeriod setting
* Client contacts Naming Service again before its outConScanPeriod is over
* Client sees the dead connection but instead of performing a retry it 
immediately throws a COMM_FAILURE exception

omniORB 4.1.3 and patched 4.1.4 clients work as expected and open a new 
connection to the Naming Service.

Can you confirm the correctness of the patch?

Regards, Peter.

["omniORB-4.1.5-20100715-MissingElseStatement.patch" (text/x-patch)]

diff -Nur omniORB/src/lib/omniORB/orbcore/omniObjRef.cc \
                omniORB.patched/src/lib/omniORB/orbcore/omniObjRef.cc
--- omniORB/src/lib/omniORB/orbcore/omniObjRef.cc	2010-07-15 07:09:09.000000000 +0200
+++ omniORB.patched/src/lib/omniORB/orbcore/omniObjRef.cc	2010-07-28 \
11:16:10.000000000 +0200 @@ -1112,6 +1112,7 @@
       if (ex.retry()) {
 	required_retry = 1;
       }
+      else {
       if (fwd) {
 	omni::revertToOriginalProfile(this);
 	CORBA::TRANSIENT ex2(TRANSIENT_FailedOnForwarded, ex.completed());
@@ -1132,6 +1133,7 @@
 	if (!_omni_callTransientExceptionHandler(this, retries++, ex2))
 	  OMNIORB_THROW(TRANSIENT,ex.minor(),ex.completed());
       }
+      }
     }
     catch(CORBA::COMM_FAILURE& ex) {
       if( fwd ) {



_______________________________________________
omniORB-list mailing list
omniORB-list@omniorb-support.com
http://www.omniorb-support.com/mailman/listinfo/omniorb-list


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic