[Ace-users] [ace-users] Problem with ACE_Priority_reactor
Douglas C. Schmidt
schmidt at dre.vanderbilt.edu
Fri Oct 19 05:32:04 CDT 2007
Hi Alex,
Thanks very much for your email. Please make sure to send all
questions related to TAO or ACE to the ACE mailing list or ACE+TAO
newsgroup, rather than to me directly since I travel frequently and
often don't have ready access to email. See
http://www.cs.wustl.edu/~schmidt/ACE-mail.html
for more info on how to access these resources.
> I am running ACE 5.5 and currently experiencing a problem with the ACE_Priority_Reactor.
Although it probably won't help your current problem with
ACE_Priority_Reactor, I recommend you upgrade to ACE+TAO+CIAO x.6.1
(i.e., ACE 5.6.1, TAO 1.6.1, and CIAO 0.6.1), 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.
> As I wrote before when I call
> remove_handler the process crashes.
>
> By now I can see the problems in the code.
> There are two problems - ( I relate here to the file Priority_Reactor.cpp)
>
> In build_bucket() we have the following lines -
>
> ACE_Event_Tuple et (this->handler_rep_.find (handle),
> handle);
> int prio = et.event_handler_->priority ();
>
> Which is a problematic since the find() can return a NULL pointer, thus priority() method can crash.
Good point - I've fixed this. Please see
http://www.dre.vanderbilt.edu/~schmidt/DOC_ROOT/ACE/ace/Priority_Reactor.h
http://www.dre.vanderbilt.edu/~schmidt/DOC_ROOT/ACE/ace/Priority_Reactor.cpp
and let me know if this works better.
> This is not what cause my code to crash though. My problem is that in dispatch_io_set() we first enter the handlers
> themselves to the buckets (in build_bucket ()) and later on in the while loop , we call their notify_handle() method
> without checking again their validity.
>
> We call
>
> this->notify_handle (et.handle_,
> mask,
> ready_mask,
> et.event_handler_,
> callback);
>
> where the et.event_handler can be invalid by now.
>
> Just to compare to the good code in the Select_Reactor - it does the following:
>
> this->notify_handle (handle,
> mask,
> ready_mask,
> this->handler_rep_.find (handle), // OK!
> callback);
> which is ok, since if the handler was removed the find(handle) returns NULL and this is checked in notify_handle.
Please let me know if the fix mentioned above solves this problem.
Thanks,
Doug
> Thanks,
>
> Alex.
>
> On 9/22/07, Douglas C. Schmidt <schmidt at dre.vanderbilt.edu> wrote:
>
> Hi Alex,
>
> To ensure that we have proper version/platform/compiler information,
> please make sure you fill out the appropriate problem report form
> (PRF), which is in
>
> $ACE_ROOT/PROBLEM-REPORT-FORM
> $TAO_ROOT/PROBLEM-REPORT-FORM
>
> or in
>
> $ACE_ROOT/BUG-REPORT-FORM
> $TAO_ROOT/BUG-REPORT-FORM
>
> in older versions of ACE+TAO. Make sure to include this information
> when asking any questions about ACE+TAO since otherwise we have to
> "guess" what version/platform/compiler/options you've using, which is
> very error-prone and slows down our responsiveness. If you don't use
> the PRF, therefore, it is less likely that someone from the core
> ACE+TAO developer team will be able to answer your question.
> Naturally, we encourage and appreciate other members of the ACE+TAO
> user community who can respond to questions that they have the answers
> to.
>
> BTW, please see the ACE_ROOT/tests/Priority_Reactor_Test.cpp for some
> examples of how to use the ACE_Priority_Reactor properly.
>
> Thanks,
>
> Doug
>
> >I was using the default reactor implementaion and I switched to work
> >with ACE_Priority_Reactor implementation. I have 40 sockets
> >(ACE_Event_Handlers) managed by it.
> >
> >When I decide to close them my application crashes and in the debugger
> >I see that in dispatch_io_set, the handlers I have just removed (using
> >remove_handler) are bring still manipulated by the reactor.
> >
> >Is it a known bug? Did I do something wrong?
> >
>
> --
> 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