[omniORB] I can't use bidir correctly

Slava Garelin garelin@ukr.net
Fri Jun 28 15:10:02 2002


I use modified version eg2_clt and eg2_impl from src/example/echo dir.
These changes add POA in the client and remove an entrance in orb-> run () in 
the server.

I change ~/.OmniORB_Config :

clientTransportRule =     *   bidir,unix,tcp,ssl
offerBiDirectionalGIOP = 1
serverTransportRule =    *     bidir,unix,tcp,ssl
acceptBiDirectionalGIOP = 1

and I get on run example: (trace level 25)

server:
==============
(skipped)
Upcall Hello!
omniORB: sendChunk: to giop:tcp:192.168.102.12:2743 35 bytes
omniORB: inputMessage: from giop:tcp:192.168.102.12:2743 12 bytes
omniORB: throw giopStream::CommFailure from 
giopImpl12.cc:1215(0,NO,COMM_FAILURE
_UnMarshalArguments)
omniORB: Server connection refcount = 1
omniORB: Server connection refcount = 0
omniORB: Server close connection from giop:tcp:192.168.102.12:2743
omniORB: AsyncInvoker: thread id = 4 has exited. Total threads = 3
omniORB: ObjRef(IDL:Echo:1.0) -- deleted.
omniORB: Preparing to shutdown ORB.
omniORB: Destroying POA(RootPOA).
omniORB: Deactivating all POA(RootPOA)'s objects.
omniORB: State root<0> (active) -> deactivating
omniORB: Waiting for requests to complete on POA(RootPOA).
omniORB: Requests on POA(RootPOA) completed.
omniORB: State root<0> (deactivating) -> etherealising
omniORB: Etherealising POA(RootPOA)'s objects.
omniORB: Removing root<0> (etherealising) from object table
omniORB: Object table entry root<0> (dead) deleted.
omniORB: RefCountServantBase has zero ref count -- deleted.
omniORB: Stopping serving incoming endpoints.
omniORB: giopServer waits for completion of rendezvousers and workers
omniORB: Destruction of POA(RootPOA) complete.
omniORB: Shutting-down all incoming endpoints.
omniORB: TCP endpoint shut down.
omniORB: 0 object references present at ORB shutdown.
omniORB: ORB shutdown is complete.
omniORB: 0 remaining ropes deleted.
omniORB: AsyncInvoker: thread id = 1 has exited. Total threads = 2
omniORB: AsyncInvoker: thread id = 2 has exited. Total threads = 1
omniORB: AsyncInvoker: deleted.
omniORB: No more references to the ORB -- deleted.
omniORB: Final clean-up
omniORB: Deleted 1 nil object reference and 0 other tracked objects.
omniORB: Assertion failed -- mutex destroyed whilst still being used
 by 1 condition variable(s).
 This is probably a bug in omniORB. Please submit a report
 (with stack trace if possible) to <omniorb@omniorb.org>.


client:
(skipped)
I said, "Hello!".
The Echo object replied, "Hello!".
omniORB: omniRemoteIdentity deleted.
omniORB: ObjRef(IDL:Echo:1.0) -- deleted.
omniORB: Preparing to shutdown ORB.
omniORB: Destroying POA(RootPOA).
omniORB: Deactivating all POA(RootPOA)'s objects.
omniORB: Waiting for requests to complete on POA(RootPOA).
omniORB: Requests on POA(RootPOA) completed.
omniORB: Etherealising POA(RootPOA)'s objects.
omniORB: Stopping serving incoming endpoints.
omniORB: giopServer waits for completion of rendezvousers and workers
omniORB: throw giopStream::CommFailure from 
giopStream.cc:812(0,NO,COMM_FAILURE_
UnMarshalArguments)
omniORB: Client connection refcount = 1
omniORB: AsyncInvoker: thread id = 4 has started. Total threads = 4
omniORB: AsyncInvoker: thread id = 3 has exited. Total threads = 4
omniORB: AsyncInvoker: thread id = 1 has exited. Total threads = 3

... and client not exit.

my patch for eg2_clt.cc :

*** eg2_clt.cc Fri Jun 14 12:24:15 2002
--- eg2_clt_new.cc  Fri Jun 28 14:07:59 2002
***************
*** 37,40 ****
--- 37,45 ----
  
      {
+       CORBA::Object_var poa = orb->resolve_initial_references("RootPOA");
+       PortableServer::POA_var root_poa = PortableServer::POA::_narrow(poa);
+       PortableServer::POAManager_var pman = root_poa->the_POAManager();
+       pman->activate();
+ 
        CORBA::Object_var obj = orb->string_to_object(argv[1]);
        Echo_var echoref = Echo::_narrow(obj);

my patch for eg2_impl.cc :

*** eg2_impl.cc        Fri Jun 14 12:24:15 2002
--- eg2_impl_new.cc Fri Jun 28 16:39:48 2002
***************
*** 57,61 ****
        pman->activate();
  
!       orb->run();
      }
      orb->destroy();
--- 57,63 ----
        pman->activate();
  
!       //orb->run();
!       char c;
!       cin >> c;
      }
      orb->destroy();


Help me please, I can't use OmniORB across firewalls!

-- 
Slava Garelin