[omniORB] Possible deadlock / hang in wait_for_detached_objects()

Duncan Grisby duncan at grisby.org
Wed Feb 11 16:09:54 GMT 2004


On Friday 23 January, Harri Pasanen wrote:

> I run into situation where an application sometimes hung at exit, and 
> traced it to the following call sequence:
> 
> omniOrbPOA::deactivate_object(const PortableServer::ObjectId& oid)
>   -> calls  detached_object();
> omniOrbPOA::lastInvocationHasCompleted(omniLocalIdentity* id)
>   -> calls  servant->_remove_ref();
>   -> calls met_detached_object();
> 
> The servant->_remove_ref(); can throw an exception, in my case it was 
> CORBA::OBJECT_NOT_EXIST, and as a result met_detached_object() was 
> never called, and pd_nDetachedObjecs was not decremented.

I don't think it's valid for _remove_ref to throw exceptions. However,
I agree that omniORB should be robust against the possibility that it
might, so I've checked in a change that calls met_detached_object even
if _remove_ref throws.

Cheers,

Duncan.

-- 
 -- Duncan Grisby         --
  -- duncan at grisby.org     --
   -- http://www.grisby.org --



More information about the omniORB-list mailing list