[ace-users] ace-users Digest, Vol 13, Issue 15

Douglas C. Schmidt schmidt at dre.vanderbilt.edu
Wed Aug 8 02:07:23 CDT 2007


Hi Ashok,

>  Pl send me ftp info 

What sorts of ftp info are you looking for?

Take care,

     Doug

> Sent from my BlackBerry 
> Ashok 
> 
> ----- Original Message -----
> From: ace-users-bounces at cse.wustl.edu <ace-users-bounces at cse.wustl.edu>
> To: ace-users at cse.wustl.edu <ace-users at cse.wustl.edu>
> Sent: Tue Aug 07 13:00:02 2007
> Subject: ace-users Digest, Vol 13, Issue 15
> 
> Send ace-users mailing list submissions to
> 	ace-users at mail.cse.wustl.edu
> 
> To subscribe or unsubscribe via the World Wide Web, visit
> 	http://mail.cse.wustl.edu/mailman/listinfo/ace-users
> or, via email, send a message with subject or body 'help' to
> 	ace-users-request at mail.cse.wustl.edu
> 
> You can reach the person managing the list at
> 	ace-users-owner at mail.cse.wustl.edu
> 
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of ace-users digest..."
> 
> 
> Today's Topics:
> 
>    1. Re: use of ACE_HAS_REACTOR_NOTIFICATION_QUEUE in Select
>       Reactor (Douglas C. Schmidt)
> 
> 
> ----------------------------------------------------------------------
> 
> Message: 1
> Date: Tue, 07 Aug 2007 06:44:12 -0500
> From: "Douglas C. Schmidt" <schmidt at dre.vanderbilt.edu>
> Subject: Re: [ace-users] use of ACE_HAS_REACTOR_NOTIFICATION_QUEUE in
> 	Select	Reactor
> To: "Premkumar P" <kumaran.prem at gmail.com>
> Cc: ace-users at cse.wustl.edu
> Message-ID: <20070807114413.0408B1000A8 at tango.dre.vanderbilt.edu>
> 
> 
> Hi,
> 
> >     i would like to add that the case is not specific to schedule_time and cancel_timer, it happens also in the case when
> >     the 3 threads is
> >     doing register_handler for WRITE_EVENT. (Other 2 condition remains the same)...
> >    
> >     Question : is there any way to make the reactor wake-up from ACE_OS::select after a time interval event if there are no
> >     events to handle so that a dead-lock is prevented ???
> 
> Sure, you can pass a timeout to the reactor event loop method.  Please
> see Chapters 3 and 4 of C++NPv2 <www.cs.wustl.edu/~schmidt/ACE/book2/>
> for details.
> 
> Thanks,
> 
>         Doug
> 
> >     regards,
> >     Prem
> > 
> >     On 8/7/07, Premkumar P <kumaran.prem at gmail.com> wrote:
> >    
> >         Hi,
> >         i tried using ACE_HAS_REACTOR_NOTIFICATION_QUEUE but it does not help. :(
> >        
> >         i will try explaining my use case first,
> >        
> >         1) i have a SOCK_Acceptor accepting connections - it uses a Select Reactor.
> >        
> >         2) handlers created for the connections accepted by the above acceptor are assigned a different Reactor instance to
> >         do read and write data on the connection  ( I will refere this Reactor as the processing REACTOR, which is
> >         different from the reactor that accepts connection)
> >        
> >         3) the acceptor calls open() on the handler cleated, in the open of the handler, i schedule a timer to keep check
> >         of ideal connections. The timer will be canceled before the handler is deleted.
> >        
> >         4) "the problem is in the above step. "
> >        
> >         Condition : the processing reactor is waiting on ACE_OS::select indefinitely for an event to occur. The acceptor
> >         accepted a new connection and called open(), which tries to schedule a timer, this call gets blocked in
> >         schedule_timer method call. At the same time a third thread which has the response for a request read earlier (on a
> >         different connection - which uses the same processing REACTOR) found that the connection is no more alive called
> >         cancel_timer so that it can delete the handler instance after unregistering it.
> >        
> >         "and i have a dead lock"
> >         i managed to get a stack trace of the the threads (Acceptor, processing REACTOR, and a third thread)
> >        
> >         Processing REACTOR waiting for events to occur:
> >           [1] __pollsys(0xcffbdb80, 0x3, 0x0, 0x0), at 0xd1100fe5
> >           [2] _pollsys(0xcffbdb80, 0x3, 0x0, 0x0), at 0xd10f572f
> >           [3] _pselect(0xe, 0x83f7b04, 0xd112a868, 0xd112a868, 0x0, 0x0), at 0xd10aee1a
> >           [4] _select(0xe, 0x83f7b04, 0x0, 0x0, 0x0, 0x0), at 0xd10af110
> >         =>[5] ACE_OS::select(width = 14, rfds = 0x83f7b04, wfds = (nil), efds = (nil), timeout = (nil)), line 46 in
> >         "OS_NS_sys_select.inl"
> >           [6] ACE_Select_Reactor_T<ACE_Reactor_Token_T<ACE_Token> >::wait_for_multiple_events(this = 0x83f7ae0,
> >         dispatch_set = CLASS, max_wait_time = (nil)), line 1104 in "Select_Reactor_T.cpp"
> >           [7] ACE_Select_Reactor_T<ACE_Reactor_Token_T<ACE_Token> >::handle_events_i(this = 0x83f7ae0, max_wait_time =
> >         (nil)), line 1443 in "Select_Reactor_T.cpp"
> >           [8] ACE_Select_Reactor_T<ACE_Reactor_Token_T<ACE_Token> >::handle_events(this = 0x83f7ae0, max_wait_time =
> >         (nil)), line 1424 in "Select_Reactor_T.cpp"
> >           [9] ACE_Reactor::run_reactor_event_loop(this = 0x83e37d0, eh = (nil)), line 233 in " Reactor.cpp"
> >           [10] HTTP::SyncHTTPListener::ReactorLoop::run(this = 0x83e39b0), line 50 in "SyncTCPListener.h"
> >           [11] ZThread::ThreadImpl::dispatch(0x83cfd28, 0x83f8560, 0xcffbdf98, 0x0), at 0xd156581f
> >           [12] ZThread::__unnamed_AAAAAfdNjGUKh::Launcher::run(0x80449c4), at 0xd1566602
> >           [13] _dispatch(0x80449c4), at 0xd156a35d
> >           [14] _thr_setup(0xd0ac3000), at 0xd10ffc42
> >           [15] _lwp_start(0xcffbdb80, 0x3, 0x0, 0x0, 0x0, 0x3), at 0xd10fff30
> > 
> >         Acceptor thread accepted a new connection and called open()
> >           [1] __lwp_park(0x0, 0x0), at 0xd10fffa9
> >           [2] cond_sleep_queue(0xd00bc6a0, 0x8693a54, 0x0), at 0xd10fa6f3
> >           [3] cond_wait_queue(0xd00bc6a0, 0x8693a54, 0x0, 0x0), at 0xd10fa805
> >           [4] _cond_wait(0xd00bc6a0, 0x8693a54), at 0xd10facfe
> >           [5] cond_wait(0xd00bc6a0, 0x8693a54), at 0xd10fad40
> >           [6] _pthread_cond_wait(0xd00bc6a0, 0x8693a54), at 0xd10fad79
> >         =>[7] ACE_OS::cond_timedwait(cv = 0xd00bc6a0, external_mutex = 0x8693a54, timeout = (nil)), line 415 in " signal.h"
> >           [8] ACE_Condition_Thread_Mutex::wait(this = 0xd00bc6a0, mutex = CLASS, abstime = (nil)), line 98 in
> >         "Condition_Thread_Mutex.cpp"
> >           [9] ACE_Condition_Thread_Mutex::wait(this = 0xd00bc6a0, abstime = (nil)), line 107 in
> >         "Condition_Thread_Mutex.cpp"
> >           [10] ACE_Token::ACE_Token_Queue_Entry::wait(this = 0xd00bc698, timeout = (nil), lock = CLASS), line 130 in
> >         "Token.inl"
> >           [11] ACE_Token::shared_acquire(this = 0x8693a40, sleep_hook_func = (nil), arg = (nil), timeout = (nil), op_type =
> >         WRITE_TOKEN), line 264 in " Token.cpp"
> >           [12] ACE_Token::acquire(this = 0x8693a40, timeout = (nil)), line 341 in "Token.cpp"
> >           [13] ACE_Guard<ACE_Reactor_Token_T<ACE_Token> >::acquire(this = 0xd00bc784), line 12 in "Guard_T.inl"
> >           [14] ACE_Guard<ACE_Reactor_Token_T<ACE_Token> >::ACE_Guard(this = 0xd00bc784, l = CLASS), line 38 in
> >         "Guard_T.inl"
> >           [15] ACE_Select_Reactor_T<ACE_Reactor_Token_T<ACE_Token> >::schedule_timer(this = 0x86933a0, handler = 0x87092d4,
> >         arg = (nil), delay_time = CLASS, interval = CLASS), line 727 in "Select_Reactor_T.cpp"
> >           [16] ACE_Reactor::schedule_timer(this = 0x86a27a8, event_handler = 0x87092d4, arg = (nil), delta = CLASS,
> >         interval = CLASS), line 689 in "Reactor.cpp"
> >           [17] SyncHTTPConnHandler::open(this = 0x8709270, stream = 0x8d534d0, clientaddr = CLASS, clienthostname = CLASS,
> >         port = CLASS), line 139 in " SyncHTTPConnHandler.cpp"
> >           [18] SyncHTTPConnAcceptor::handle_input(this = 0x83f4ce8, handle = 9), line 559 in "SyncHTTPConnAcceptor.cpp"
> >           [19] ACE_Select_Reactor_T<ACE_Reactor_Token_T<ACE_Token> >::notify_handle(this = 0x83ef540, handle = 9, mask =
> >         1U, ready_mask = CLASS, event_handler = 0x83f4ce8, ptmf = 0xd00bdc34), line 817 in "Select_Reactor_T.cpp"
> >           [20] ACE_Select_Reactor_T<ACE_Reactor_Token_T<ACE_Token> >::dispatch_io_set(this = 0x83ef540,
> >         number_of_active_handles = 1, number_of_handlers_dispatched = 1, mask = 1, dispatch_mask = CLASS, ready_mask =
> >         CLASS, callback = 0xd00bdc94), line 1205 in "Select_Reactor_T.cpp"
> >           [21] ACE_Select_Reactor_T<ACE_Reactor_Token_T<ACE_Token> >::dispatch_io_handlers(this = 0x83ef540, dispatch_set =
> >         CLASS, number_of_active_handles = 1, number_of_handlers_dispatched = 1), line 1263 in "Select_Reactor_T.cpp"
> >           [22] ACE_Select_Reactor_T<ACE_Reactor_Token_T<ACE_Token> >::dispatch(this = 0x83ef540, active_handle_count = 1,
> >         dispatch_set = CLASS), line 1367 in "Select_Reactor_T.cpp"
> >           [23] ACE_Select_Reactor_T<ACE_Reactor_Token_T<ACE_Token> >::handle_events_i(this = 0x83ef540, max_wait_time =
> >         (nil)), line 1447 in "Select_Reactor_T.cpp"
> >           [24] ACE_Select_Reactor_T<ACE_Reactor_Token_T<ACE_Token> >::handle_events(this = 0x83ef540, max_wait_time =
> >         (nil)), line 1424 in "Select_Reactor_T.cpp"
> >           [25] ACE_Reactor::run_reactor_event_loop(this = 0x83e36e0, eh = (nil)), line 233 in " Reactor.cpp"
> >           [26] HTTP::SyncHTTPListener::ReactorLoop::run(this = 0x83e3788), line 52 in "SyncHTTPListener.h"
> >           [27] ZThread::ThreadImpl::dispatch(0x83cfd28, 0x83f4de8, 0xd00bdf98, 0x0), at 0xd156581f
> >           [28] ZThread::__unnamed_AAAAAfdNjGUKh::Launcher::run(0x80449c4), at 0xd1566602
> >           [29] _dispatch(0x80449c4), at 0xd156a35d
> >           [30] _thr_setup(0xd0ac2c00), at 0xd10ffc42
> >           [31] _lwp_start(0x0, 0x0, 0x0, 0x8693a54, 0xd0ac2c00, 0xd1129000), at 0xd10fff30
> > 
> >         a third thread that processed the request (will initialize the write if connection still alive) - in this case will
> >         delete the handler as the connection is not alive
> >        
> >           [1] __lwp_park(0x0, 0x0), at 0xd10fffa9
> >           [2] cond_sleep_queue(0xd07bc968, 0x8693a54, 0x0), at 0xd10fa6f3
> >           [3] cond_wait_queue(0xd07bc968, 0x8693a54, 0x0, 0x0), at 0xd10fa805
> >           [4] _cond_wait(0xd07bc968, 0x8693a54), at 0xd10facfe
> >           [5] cond_wait(0xd07bc968, 0x8693a54), at 0xd10fad40
> >           [6] _pthread_cond_wait(0xd07bc968, 0x8693a54), at 0xd10fad79
> >         =>[7] ACE_OS::cond_timedwait(cv = 0xd07bc968, external_mutex = 0x8693a54, timeout = (nil)), line 415 in
> >         "OS_NS_Thread.inl"
> >           [8] ACE_Condition_Thread_Mutex::wait(this = 0xd07bc968, mutex = CLASS, abstime = (nil)), line 98 in
> >         "Condition_Thread_Mutex.cpp"
> >           [9] ACE_Condition_Thread_Mutex::wait(this = 0xd07bc968, abstime = (nil)), line 107 in
> >         "Condition_Thread_Mutex.cpp"
> >           [10] ACE_Token::ACE_Token_Queue_Entry::wait(this = 0xd07bc960, timeout = (nil), lock = CLASS), line 130 in "
> >         Token.inl"
> >           [11] ACE_Token::shared_acquire(this = 0x8693a40, sleep_hook_func = (nil), arg = (nil), timeout = (nil), op_type =
> >         WRITE_TOKEN), line 264 in "Token.cpp"
> >           [12] ACE_Token::acquire(this = 0x8693a40, timeout = (nil)), line 341 in " Token.cpp"
> >           [13] ACE_Guard<ACE_Reactor_Token_T<ACE_Token> >::acquire(this = 0xd07bca38), line 12 in "Guard_T.inl"
> >           [14] ACE_Guard<ACE_Reactor_Token_T<ACE_Token> >::ACE_Guard(this = 0xd07bca38, l = CLASS), line 38 in
> >         "Guard_T.inl"
> >           [15] ACE_Select_Reactor_T<ACE_Reactor_Token_T<ACE_Token> >::cancel_timer(this = 0x86933a0, handler = 0x8b47504,
> >         dont_call_handle_close = 1), line 695 in "Select_Reactor_T.cpp"
> >           [16] ACE_Reactor::cancel_timer(this = 0x86a27a8, event_handler = 0x8b47504, dont_call_handle_close = 1), line 704
> >         in " Reactor.cpp"
> >           [17] HTTP::SyncHTTPConnHandler::handleSendError(this = 0x8b474a0), line 921 in "SyncHTTPConnHandler.cpp"
> >           [18] HTTP::SyncHTTPConnHandler::sendResponse(this = 0x8b474a0), line 799 in " SyncHTTPConnHandler.cpp"
> >           [19] itech::gateway::transport::HTTP::SyncHTTPConnHandler::processed(this = 0x8b474a0, msgctx = 0x8568d48), line
> >         950 in "SyncHTTPConnHandler.cpp"
> >           -----------------------------------------------------------------------------------------------
> >           [26] ZThread::__unnamed_AAAAA9bNjGkZd::GroupedRunnable::run(0x8551100, 0x83b96a8, 0xd07bde68, 0xd1552518), at
> >         0xd15530d1
> >           [27] ZThread::__unnamed_AAAAA9bNjGkZd::Worker::run(0x83cf178, 0x83d1760, 0xd07bdf78, 0xd15657f0), at 0xd15524c6
> >           [28] ZThread::ThreadImpl::dispatch(0x83cfd28, 0x83d1760, 0xd07bdf98, 0x0), at 0xd156581f
> >           [29] ZThread::__unnamed_AAAAAfdNjGUKh::Launcher::run(0x8045328), at 0xd1566602
> >           [30] _dispatch(0x8045328), at 0xd156a35d
> >           [31] _thr_setup(0xd0ac1000), at 0xd10ffc42
> >           [32] _lwp_start(0x0, 0x0, 0x0, 0x8693a54, 0xd0ac1000, 0xd1129000), at 0xd10fff30
> > 
> >         i tried debugging but the Reactor implementation is not that easy for me to understand
> >         any help would be greatly helpful, thankx in advance.
> >        
> >         Reagards,
> >         Prem
> >        
> >         On 8/6/07, Douglas C. Schmidt < schmidt at dre.vanderbilt.edu> wrote:
> > 
> >             Hi Prem,
> >            
> >             > that for the quick reply, and the info.  I dont think it is a bug, i
> >             > had written my application compiling ACE with the option enabled, when
> >             > upgrading to ACE 5.5.10 - i forgot to enable this option, and i am
> >             > seeing some strange behavior (that i dont expect!!!). I am recompiling
> >             > ACE with this option enabled will try to look deep what is happening.
> >            
> >             Please see Chapter 4 of C++NPv2 for more explanations of what may be
> >             going on.
> >            
> >             Thanks,
> >            
> >                     Doug
> > 
> > _______________________________________________
> > ace-users mailing list
> > ace-users at mail.cse.wustl.edu
> > http://mail.cse.wustl.edu/mailman/listinfo/ace-users
> 
> 
> 
> ------------------------------
> 
> _______________________________________________
> ace-users mailing list
> ace-users at mail.cse.wustl.edu
> http://mail.cse.wustl.edu/mailman/listinfo/ace-users
> 
> 
> End of ace-users Digest, Vol 13, Issue 15
> *****************************************
> 
> _______________________________________________
> ace-users mailing list
> ace-users at mail.cse.wustl.edu
> http://mail.cse.wustl.edu/mailman/listinfo/ace-users



More information about the Ace-users mailing list