[omniORB-dev] omni bug (patch attached)

Serguei Kolos Serguei.Kolos at cern.ch
Mon Nov 24 12:05:52 GMT 2003


Hello

While doing object deactivation I have noticed that omni always delays 
deactivation
to another thread because the omniLocalIdentity::is_idle() method is 
implemented as
{ return !pd_nInvocations;}.

I think this is wrong because later in the same file 
(include/omniORB4/internal/localIdentity.h)
the comment for the pd_nInvocations attribute explains that it is 
intentionally set to 1 when
there are no invocations in order to prevent the overhead of unnecessary 
notifications.

Because of that the is_idle always returns zero, which results in 
delayed deactivation.
The patch attached to this main changes the is_idle implementation to
{ return (pd_nInvocations<=1);}.

Unfortunately I'm not sure that this solution is fully correct. Could 
someone please comment on that
because this issue is quite important for me.

Cheers,
Sergei
-------------- next part --------------
*** localIdentity.h	Fri Nov 29 15:03:41 2002
--- /afs/cern.ch/user/k/kolos/working/online/omni/omni-04-02-00/include/omniORB4/internal/localIdentity.h	Mon Nov 24 10:28:17 2003
***************
*** 29,34 ****
--- 29,37 ----
  
  /*
    $Log: localIdentity.h,v $
+   Revision 1.1.1.1  2003/11/03 15:00:13  kolos
+   Create omni package.
+ 
    Revision 1.1.4.9  2002/11/29 14:03:41  dgrisby
    Rearrange declarations to make Code Warrior happy.
  
***************
*** 144,150 ****
  
    inline omniServant*              servant() const { return pd_servant; }
    inline _OMNI_NS(omniObjAdapter)* adapter() const { return pd_adapter; }
!   inline int                       is_idle() const { return !pd_nInvocations;}
    inline _CORBA_Boolean        deactivated() const { return pd_deactivated; }
    // For each of the above the ownership of the returned value
    // is the responsibility of this object.  No reference counts
--- 147,153 ----
  
    inline omniServant*              servant() const { return pd_servant; }
    inline _OMNI_NS(omniObjAdapter)* adapter() const { return pd_adapter; }
!   inline int                       is_idle() const { return (pd_nInvocations<=1);}
    inline _CORBA_Boolean        deactivated() const { return pd_deactivated; }
    // For each of the above the ownership of the returned value
    // is the responsibility of this object.  No reference counts


More information about the omniORB-dev mailing list