[Ace-users] [tao-bugs] Bug in MT_NOUPCALL prevents upcall disabling

Johnny Willemsen jwillemsen at remedy.nl
Tue Feb 26 00:23:22 CST 2008


Hi,

Can you provide a regression test for this problem? In order to make changes
to the core of TAO we really need to have a regression test as reproducer.

Regards,


Johnny Willemsen
Remedy IT
Postbus 101
2650 AC  Berkel en Rodenrijs
The Netherlands
www.theaceorb.nl / www.remedy.nl  

*** Integrated compile and test statistics see
http://scoreboard.theaceorb.nl ***
*** Commercial service and support for ACE/TAO/CIAO             ***
*** See http://www.theaceorb.nl/en/support.html                 ***


"Robert Hancock" <hancock at sedsystems.ca> wrote in message
news:<mailman.3728.1203974498.5286.tao-bugs at mail.cse.wustl.edu>...
> Back in 2005, Mickael P. Golovin pointed out a problem in the 
> LF_NOUPCALL client connection handler, where it failed to disable 
> upcalls in some cases:
> 
> http://groups.google.ca/group/comp.soft-sys.ace/msg/868295873678066f
> 
> Looking at the current code it appears that this fix is still needed. 
> With the current code, upcalls are only disabled if the transport was 
> opened in the client role and is not bidirectional. However in this case 
> upcalls on that connection are not even possible so this makes no sense. 
> Previously the upcalls were disabled if the transport was opened in the 
> server role or is bidirectional, which makes more sense.
> 
> The code was originally correct but was broken by the change below.
> 
> Sun Oct  3 13:38:01 2004  Balachandran Natarajan
<bala at dre.vanderbilt.edu>
> 
>          * tao/Wait_Strategy.h:
> 
>            Added a new pure virtual method, can_process_upcalls ().
> 
>          * tao/Wait_On_LF_No_Upcall.cpp:
>          * tao/Wait_On_LF_No_Upcall.h:
>          * tao/Wait_On_Leader_Follower.cpp:
>          * tao/Wait_On_Leader_Follower.h:
>          * tao/Wait_On_Reactor.cpp:
>          * tao/Wait_On_Reactor.h:
>          * tao/Wait_On_Read.cpp:
>          * tao/Wait_On_Read.h:
> 
>            Implementation for can_process_upcalls (). This method returns
>            true for all the Wait strategies but for
>            Wait_On_LF_No_Upcall. Only the Wait_On_LF_No_Upcall returns
>            false since the semantics of the class are so.
> 
>          * tao/Connection_Handler.cpp:
> 
>            Use the can_process_upcalls () in handle_input_eh () instead of
>            the checks in place there. This check invariably resulted in a
>            TSS access which seem to slow down things quite a bit. This was
>            based on my profiler. I am not sure whether this is going to
>            show up any conclusive results in our stat pages.
> 
>          * tao/Transport.h:
>          * tao/Transport.inl:
> 
>            Removed the acts_as_server () call since the functionality is
>            replaced by the new pure virtual method in Wait_Strategy.
> 
> I've made a patch based on their suggested fix, it's below. It seems 
> like this fix should be applied as otherwise MT_NOUPCALL will basically 
> not work at all..
> 
> --- ACE_wrappers/TAO/tao/Wait_On_LF_No_Upcall.cpp.orig  2008-02-25 
> 20:02:52.000000000 +0000
> +++ ACE_wrappers/TAO/tao/Wait_On_LF_No_Upcall.cpp       2008-02-25 
> 20:08:10.000000000 +0000
> @@ -96,13 +96,15 @@ namespace TAO
>     bool
>     Wait_On_LF_No_Upcall::can_process_upcalls (void) const
>     {
> -    TAO_ORB_Core_TSS_Resources *tss =
> -      this->transport_->orb_core ()->get_tss_resources ();
> +    if ((this->transport_->opened_as () == TAO::TAO_SERVER_ROLE) ||
> +        (this->transport_->bidirectional_flag () == 1))
> +      {
> +        TAO_ORB_Core_TSS_Resources *tss =
> +          this->transport_->orb_core ()->get_tss_resources ();
> 
> -    if ((this->transport_->opened_as () == TAO::TAO_CLIENT_ROLE) &&
> -        (this->transport_->bidirectional_flag () == 0) &&
> -        (tss->upcalls_temporarily_suspended_on_this_thread_ == true))
> -      return false;
> +        if (tss->upcalls_temporarily_suspended_on_this_thread_ == true)
> +          return false;
> +      }
> 
>       return true;
>     }
> 
> 
> 
> -- 
> Robert Hancock
> Programmer Analyst
> SED Systems
> Email: hancock at sedsystems.ca
> 



More information about the Ace-users mailing list