[omniORB] Distributed deadlock with mixed client/server apps

Duncan Grisby dgrisby@uk.research.att.com
Thu, 15 Nov 2001 10:34:31 +0000


On Wednesday 14 November, Patrick Hartling wrote:

[...]
> The call by ObserverImpl to getValue() in Subject blocks.  As far as I 
> have been able to determine, the problem is on the C++ side.  I have 
> tried three different Java ORBs (Java IDL in JDK 1.4, OpenORB 1.2.0, and 
> ORBacus 4.1.0), and all give exactly the same behavior.  I am still 
> compiling ORBacus 4.1.0 for C++ to try it in place of omniORB.

It isn't clear from your diagram, but I assume that the call to
getValue() is recursive -- i.e. it happens before the call to
setValue() has returned. There are two ways a client can choose to
perform this kind of recursive call: it can open a new TCP connection,
or it can re-use the existing connection. Unfortunately, omniORB 3
only copes with the first way. Your Java ORBs are, by default, using
the second way, leading to a deadlock.

I believe some Java ORBs have an option that makes them use the first
way of creating new TCP connections. Alternatively, the omniORB 4
pre-release does not have this restriction, so it will work fine. This
is explained here:

  http://www.uk.research.att.com/cgi-bin/omni-wiki/moin.cgi/OmniOrb4DevelopmentStatus#line221


Cheers,

Duncan.

-- 
 -- Duncan Grisby  \  Research Engineer  --
  -- AT&T Laboratories Cambridge          --
   -- http://www.uk.research.att.com/~dpg1 --