[Ace-users] Re: [ace-bugs] [ACE_TP_Reactor]: [Event_Handler
suspension not honored for handle_close]
Douglas C. Schmidt
schmidt at dre.vanderbilt.edu
Thu Jul 26 13:11:58 CDT 2007
Hi Hal,
Thanks for using the PRF.
> ACE VERSION: 5.5
I believe this problem has been fixed in a more recent version of ACE.
Please upgrade to ACE+TAO+CIAO x.5.9 (i.e., ACE 5.5.9, TAO 1.5.9, and
CIAO 0.5.9), which you can download from
http://download.dre.vanderbilt.edu
under the heading: "Latest Beta Kit".
The DOC groups at Washington University, UC Irvine, and Vanderbilt
University only provide "best effort" support for non-sponsors for the
latest release, as described in
http://www.dre.vanderbilt.edu/~schmidt/DOC_ROOT/ACE/docs/ACE-bug-process.html
Thus, if you need more "predictable" help for earlier versions of
ACE+TAO, I recommend that you check out
http://www.dre.vanderbilt.edu/support.html
for a list of companies that will provide you with ACE+TAO commercial
support.
Thanks,
Doug
> HOST MACHINE and OPERATING SYSTEM: RedHat ES 3, gcc-4.1.1
> ACE_HAS_NOTIFICATION_QUEUE is defined
>
> AREA/CLASS/EXAMPLE AFFECTED: ACE_TP_Reactor
>
> DOES THE PROBLEM AFFECT:
> EXECUTION? Yes
>
> SYNOPSIS: Event_Handler suspension not honored for handle_close
>
> DESCRIPTION:
> handle_close on an event handler is getting called by two threads in the same thread pool using the same ACE_TP_Reactor.
> One call is from a -1 return from an the default handle_exception event (which was triggered earlier via reactor->notify)
> and the other is a -1 return from a handle_input.
>
> The problem is intermittent and doesn't happen every time.
>
> The sequence of events is this
>
> handle_close is called with mask of 4 (but doesn't exit)
> handle_close is called again by another thread with mask of 1
> handle_close with mask of 1 exits
> segfault before handle_close with mask of 4 exits.
> The stack trace is usually corrupted, but sometimes reports reactor->remove_handler()
>
> handle_close does call remove_handler, purge_pending_notifications and all of the usual, with ALL_EVENTS_MASK | DONT_CALL
> and then super::handle_close(). ACE_Svc_Handler::handle_close I believe calls delete on the object, which is good. The bad
> thing is, there is a another thread using that object that shouldn't be.
>
> The threads calling handle_close are the correct threads that are associated with that thread pool. They're not doing
> anything fancy, just calling handle_events.
>
> As I understand it, the ACE_TP_Reactor is supposed to suspend events on an event handler that is being called by another
> thread until that call returns. So what's going on here? Is this a mistaken interpretation by me? Is there a known bug
> in this version? Or is something else entirely going on?
>
> REPEAT BY:
> Happens intermittently. Call reactor->notify(event_handler).
>
> SAMPLE FIX/WORKAROUND: Haven't found one
>
> _______________________________________________
> ace-bugs mailing list
> ace-bugs at mail.cse.wustl.edu
> http://mail.cse.wustl.edu/mailman/listinfo/ace-bugs
More information about the Ace-users
mailing list