[ace-users] Acceptor pattern w/ select reactor notification
Douglas C. Schmidt
schmidt at dre.vanderbilt.edu
Fri Sep 28 11:11:40 CDT 2007
Thanks for using the PRF.
>Fedora core 5 linux
>I am getting quite a few segmentation faults that appear in the
>A client connects to the acceptor and begins sending and receiving messages.
>After some point the client disconnects - either expected (logoff) or
>unexpected (dropped network).
>I catch the SIGPIPE signal and enqueue a HANGUP message as follows:
> a) Note the current notification strategy
> b) NULL the notification strategy
> c) Construct an ACE_Message_Block with length 0 and message type set
> d) Put above message on message queue.
> e) If cached notification strategy from step a is not NULL then call
>notify on it.
> f) Return 0
>I run the app and see that someone is putting a message on my message
>queue and triggering
>my notification strategy to push my object back on the reactors
>notification pipe. Then when
>I'm reading my message_queue in handle_output I find the message with
>the message type of
>MB_HANGUP and return -1 (which is my understanding will call
>handle_close which in turn
>deletes the object). Then the reactor notification pipe attempts to call
>this object to handle_output
>again and crashes since the object has been freed inside the
>So, the question is what is the correct way to close an ACE_Svc_Handler
>when a SIGPIPE occurs?
There are some examples of this sort of thing in Chapters 6 and 7 of
C++NPv2 <www.cs.wustl.edu/~schmidt/ACE/book2/>. I recommend you take
a look there and see if they shed any light on what you're doing.
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