[omniORB] Nested call blocked

Sai-Lai Lo S.Lo@uk.research.att.com
24 Jan 2001 11:00:37 +0000


It may be the case that Visibroker is using the same tcp connection to sent
the "display()" and the "push()" request. If that is the case, omniORB will
not see the push request because there is only 1 thread dispatched to serve
one connection. The thread is in the process of waiting for the reply to
"request()".

Unless you can tell visibroker to have at most 1 outstanding request per
connection, I'm afraid we have an interoperability problem here.

If you can, I suggest you break the long nested call chain. Either by

1. in display() spawn another thread to do request() and then return
   immediately. 

OR

2. in request(), spawn another thread to do push() and then return
   immediately.



In omniORB4 currently under development, we'll address this issue. 

Sai-Lai


>>>>> Peter Nyquist writes:

> We have a system with one client/server using omniORB on Linux (A)
> and another client/server using Visibroker on Windows 2000 (B).

> In A there are two CORBA objects, Gateway and GatewaySession.
> In B there are two CORBA objects, ConnectManager and ApplicationSession.

> At startup, Gateway receives a reference to ConnectManager from the naming
> service.

> A client connects to the GatewaySession, which using Gateway's reference
> calls newConnection(GatewaySession-ref) in ConnectManager. Connect manager
> passes the GatewaySession-ref to ApplicationSession. No calls are now
> "hanging".

> The following nested calls now occur:

> Visibroker side                                                  omniORB
> side

> ApplicationSession -----> display(ApplicationSession-ref) ----->
> GatewaySession
> ApplicationSession <----- request() <--------------------------<
> GatewaySession
> ApplicationSession -----> push() ------------------------------> blocked in
> omniORB.

> The push() call does not reach the GatewaySession code.

> It seems that since omniORB is already processing the display() call, it
> cannot handle the
> nested push() call. Is this a correct analysis of the problem? Is this a
> known problem?
> Can we set up omniORB to somehow handle this type of nested call?

> When we run VisiBroker on both sides, it works just fine. Running JavaORB ->
> omniBroker still
> shows the same problem.

> Thanks



-- 
Sai-Lai Lo                                   S.Lo@uk.research.att.com
AT&T Laboratories Cambridge           WWW:   http://www.uk.research.att.com 
24a Trumpington Street                Tel:   +44 1223 343000
Cambridge CB2 1QA                     Fax:   +44 1223 313542
ENGLAND