[ace-users] ACE_TP_Reactor:random crash sometimes

Douglas C. Schmidt schmidt at dre.vanderbilt.edu
Tue Jun 12 14:47:13 CDT 2007


Hi Mihai,

>It seems everything works just fine now.

Great!

>I give up using notification mechanism for the event
>handler' message queue and now I just register
>manually  for write events when I place a message in
>the handler queue
>
>this->reactor ()->register_handler
>      (this, ACE_Event_Handler::WRITE_MASK);

Thanks for passing along this tip.

Doug

>
>
>--- Steve Huston <shuston at riverace.com> wrote:
>
>> Hi Mihai,
>> 
>> > Ok ..I've managed to simplify to the following
>> > problem:
>> > 
>> > While one thread from the reactor thread pool
>> > (ACE_TP_Reactor is inside the handle_input() of a
>> > handle another thread from the reactor thread pool
>> is
>> > calling handle_output() on the same handle.
>> 
>> Ok.
>> 
>> > Is this behaviour possible?
>> 
>> Since it's happening, it's possible ;-)
>> 
>> > In C++NPv2 it is stated about ACE_TP_Reactor:
>> > "It prevents multiple I/O events from being
>> dispatched
>> > to the same event handler simultaneously in
>> different
>> > threads. This constraint preserves the I/O
>> dispatching
>> > behavior of ACE_Select_Reactor, alleviating the
>> need
>> > to add synchronization locks to a handler's I/O
>> > processing."
>> > 
>> > I'm a little puzzled
>> 
>> The key phrase in the above is "I/O events" - this
>> does not include
>> notifications. Notifications and I/O can be
>> dispatched in different
>> threads to the same handler. Same thing with timers.
>> 
>> I recommend you investigate the reference counted
>> handlers way of
>> dealing with this. I'm available for consulting this
>> week if you get
>> into a jam and would like some help.
>> 
>> -Steve
>> 
>> --
>> Steve Huston, Riverace Corporation
>> Would you like ACE to run great on your platform?
>> See http://www.riverace.com/sponsor.htm
>> 
>> > --- Steve Huston <shuston at riverace.com> wrote:
>> > 
>> > > Hi Mihai,
>> > > 
>> > > It could be that the reactor is still
>> dispatching
>> > > notifications after
>> > > the handler is unregistered. You can investigate
>> two
>> > > ways to avoid
>> > > this:
>> > > 
>> > > 1. See sidebar 22 on page 94 in C++NPv2
>> > > 2. Use event handler reference counting to avoid
>> > > deleting a handler
>> > > while there's a reference pending (the notify).
>> See
>> > > ACE News and Tips
>> > > Newsletter from October 2005
>> > >
>> >
>>
>(http://www.riverace.com/newsletters/October2005.htm)
>> > > 
>> > > Best regards,
>> > > -Steve
>> > > 
>> > > --
>> > > Steve Huston, Riverace Corporation
>> > > Would you like ACE to run great on your
>> platform?
>> > > See http://www.riverace.com/sponsor.htm
>> > > 
>> > > 
>> > > > -----Original Message-----
>> > > > From: ace-users-bounces at cse.wustl.edu 
>> > > > [mailto:ace-users-bounces at cse.wustl.edu] On
>> Behalf
>> > > Of Mihai Bucica
>> > > > Sent: Tuesday, June 12, 2007 6:17 AM
>> > > > To: ace-users at cse.wustl.edu
>> > > > Subject: Re: [ace-users] ACE_TP_Reactor:random
>> > > crash sometimes
>> > > > 
>> > > > 
>> > > > 
>> > > > --- "Douglas C. Schmidt"
>> > > <schmidt at dre.vanderbilt.edu>
>> > > > wrote:
>> > > > > >     ACE VERSION: 5.5
>> > > > > 
>> > > > > ACE 5.5 is rather old, so could you please
>> try
>> > > > > upgrading to ACE+TAO+CIAO
>> > > > 
>> > > > 
>> > > > I've compiled it the latest beta kit ACE 5.5.8
>> and
>> > > the
>> > > > issue is valid.
>> > > > 
>> > > > PRF:
>> > > > 
>> > > >     ACE_TP_Reactor:random crash sometimes 
>> > > > 
>> > > >     ACE VERSION: 5.5.8 (latest beta kit)
>> > > > 
>> > > >     HOST MACHINE and OPERATING SYSTEM:
>> > > >       AMD Turion 64 & Windows XP Pro 32
>> > > > 
>> > > >     COMPILER NAME AND VERSION (AND
>> PATCHLEVEL):
>> > > >       Microsoft Visual C++ .NET 2003
>> > > > 
>> > > >     THE $ACE_ROOT/ace/config.h FILE : 
>> > > >       #include "ace/config-win32.h"
>> > > > 
>> > > >     AREA/CLASS/EXAMPLE AFFECTED:
>> > > >       ACE_TP_Reactor & Acceptor
>> > > >  
>> > > >     DOES THE PROBLEM AFFECT:
>> > > >       EXECUTION
>> > > >       
>> > > >     SYNOPSIS:
>> > > >       sometimes one thread from
>> ACE_TP_Reactor'
>> > > pool
>> > > > is trying to access a recently removed handle 
>> > > >     
>> > > >     DESCRIPTION:
>> > > >       I'm trying to build a server starting
>> from
>> > > > examples/APG/TreadPools/TP_Reactor project and
>> > > I've
>> > > > performed the following small modifications:
>> > > >       I've added a
>> > > 'ACE_Reactor_Notification_Strategy
>> > > > _notifier' to our Request_Handler class and
>> also
>> > > done
>> > > > the proper initialization stuff:
>> > > >       
>> > > >       Request_Handler: notifier_ (0, this,
>> > > > ACE_Event_Handler::WRITE_MASK)
>> > > >       Request_Handler::open ->
>> > > this->notifier_.reactor
>> > > > (this->reactor ());
>> > > >                                this->msg_queue
>> > > > ()->notification_strategy (&this->notifier_); 
>>  
>> > > >    
>> > > >       I'm also doing a strange thing in
>> > > handle_input()
>> > > > 
>> > > >       int Request_Handler::handle_input() {
>> > > >         ..............
>> > > >         ACE_Message_Block *mb = new
>> > > > ACE_Message_Block(sizeof(buffer)+1);
>> > > >         mb->copy(buffer,sizeof(buffer));
>> > > >         this->putq(mb); 
>> > > >   
>> > > >         return -1; 
>> > > >       }
>> > > >       
>> > > >       int Request_Handler::handle_close
>> > > (ACE_HANDLE
>> > > > fd, ACE_Reactor_Mask)
>> > > >       {
>> > > >         ACE_DEBUG ((LM_DEBUG,
>> > > >               ACE_TEXT ("(%t) svr close; fd:
>> > > 0x%x\n"),
>> > > >               fd));
>> > > > 
>> > > >         return super::handle_close();
>> > > >       }
>> > > > 
>> > > >       This will cause the program to crash
>> > > > sometimes.The 'handle' is removed from reactor
>> and
>> > > > deleted but another thread from the thread
>> pool
>> > > will
>> > > > try to output our ACE_Message_Block object
>> from
>> > > the
>> > > > event handler internal queue.   
>> > > >       (5200) handling events ....
>> > > >       (3672) handling events ....
>> > > >       (5676) handling events ....
>> > > >         Request_Handler::open
>> > > >       (3672) handling events ....
>> > > >       (5676) handling events ....
>> 
>=== message truncated ===
>
>
>
>       
>____________________________________________________________________________________
>Yahoo! oneSearch: Finally, mobile search 
>that gives answers, not web links. 
>http://mobile.yahoo.com/mobileweb/onesearch?refer=1ONXIC
>


-- 
Dr. Douglas C. Schmidt                       Professor and Associate Chair
Electrical Engineering and Computer Science  TEL: (615) 343-8197
Vanderbilt University                        WEB: www.dre.vanderbilt.edu/~schmidt
Nashville, TN 37203                          NET: d.schmidt at vanderbilt.edu



More information about the Ace-users mailing list