diff options
-rw-r--r-- | TAO/ChangeLog | 26 | ||||
-rw-r--r-- | TAO/tao/IIOP_Connection_Handler.cpp | 9 | ||||
-rwxr-xr-x | TAO/tests/BiDirectional/run_test3557.pl | 2 |
3 files changed, 34 insertions, 3 deletions
diff --git a/TAO/ChangeLog b/TAO/ChangeLog index 46ca8fe686b..9d6189508f3 100644 --- a/TAO/ChangeLog +++ b/TAO/ChangeLog @@ -1,3 +1,29 @@ +Mon Jun 15 19:45:30 UTC 2009 Phil Mesnier <mesnier_p@ociweb.com> + + * tao/IIOP_Connection_Handler.cpp: + + Change the initialization of the bidir listen point received in + the context. This will silence an error that is reported by the + ACE_INET_Addr ctor regardless of the debug output level. + + * tests/BiDirectional/run_test3557.pl: + + Change the number of iterations sent by the server to the + callback. This is necessary to avoid a problem on windows in + which the TAO_IIOP_Endpoint::hash() method first calls its + object_addr_i() to initialize the object address. This then + calls ACE_INET_Addr::set() which ultimately calls + gethostbyname(). When the supplied endpoint is unreachable, + as is the point of this test, windows apparently takes a while + to time out before actually completing invocation and passing + the test. + + This actually points out a potentential failure in the transport + cache in that recached bidir transports may end up using a hash + key value of 0. This is not in itself a failure, but more than + one such entry will cause that 0'th bucket to become + disproportionally large. + Mon Jun 15 18:41:04 UTC 2009 Johnny Willemsen <jwillemsen@remedy.nl> * orbsvcs/orbsvcs/SSLIOP/SSLIOP_Factory.cpp: diff --git a/TAO/tao/IIOP_Connection_Handler.cpp b/TAO/tao/IIOP_Connection_Handler.cpp index 30e21eb609c..78c638a8aa7 100644 --- a/TAO/tao/IIOP_Connection_Handler.cpp +++ b/TAO/tao/IIOP_Connection_Handler.cpp @@ -515,8 +515,13 @@ TAO_IIOP_Connection_Handler::process_listen_point_list ( for (CORBA::ULong i = 0; i < len; ++i) { IIOP::ListenPoint listen_point = listen_list[i]; - ACE_INET_Addr addr (listen_point.port, - listen_point.host.in ()); + + // since the supplied host/port could be unresolvable, the assigning + // constructor of the INET addr should not be as it will emit an error + // if the underlying set fails. An unresolvable address in this case + // is OK, as it will only be used to find an already cached transport. + ACE_INET_Addr addr; + (void)addr.set(listen_point.port, listen_point.host.in ()); if (TAO_debug_level > 0) { diff --git a/TAO/tests/BiDirectional/run_test3557.pl b/TAO/tests/BiDirectional/run_test3557.pl index 42123839deb..f90401f6e45 100755 --- a/TAO/tests/BiDirectional/run_test3557.pl +++ b/TAO/tests/BiDirectional/run_test3557.pl @@ -26,7 +26,7 @@ my $client_iorfile = $client->LocalFile ($iorbase); $server->DeleteFile($iorbase); $client->DeleteFile($iorbase); -$SV = $server->CreateProcess ("server", "-ORBdebuglevel $debug_level -o $server_iorfile -i 100"); +$SV = $server->CreateProcess ("server", "-ORBdebuglevel $debug_level -o $server_iorfile -i 3"); $CL = $client->CreateProcess ("client", "-k file://$client_iorfile -ORBEndpoint iiop://:9950/hostname_in_ior=foobar.baz"); $server_status = $SV->Spawn (); |