diff options
author | jxh <jxh@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1999-09-15 15:49:45 +0000 |
---|---|---|
committer | jxh <jxh@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1999-09-15 15:49:45 +0000 |
commit | 0f1fd23ae22d849daaf1b16d8cc44109b41f1979 (patch) | |
tree | 7bdf1f3ebe024e9c360f2cd34affa582b0ee7514 /ace/TP_Reactor.cpp | |
parent | a5c741238aec8266ce6eb65c23c8e5a20ca7243e (diff) | |
download | ATCD-0f1fd23ae22d849daaf1b16d8cc44109b41f1979.tar.gz |
Fixed a problem where cancel_wakeup would fail. Since an event
handler is suspended for the duration of the up-call, the wait_mask_
was being over-written by the suspend_mask_ when the event handler
is resumed. This fixes the problem by extending TP_Reactor with its
own implementations of mask_ops which operate on both wait_mask_ and
suspend_mask_.
Diffstat (limited to 'ace/TP_Reactor.cpp')
-rw-r--r-- | ace/TP_Reactor.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/ace/TP_Reactor.cpp b/ace/TP_Reactor.cpp index edec959ebf8..3eb043e31b0 100644 --- a/ace/TP_Reactor.cpp +++ b/ace/TP_Reactor.cpp @@ -188,6 +188,26 @@ ACE_TP_Reactor::handle_events (ACE_Time_Value *max_wait_time) return result; } +int +ACE_TP_Reactor::mask_ops (ACE_HANDLE handle, + ACE_Reactor_Mask mask, + int ops) +{ + ACE_TRACE ("ACE_Select_Reactor_T::mask_ops"); + ACE_MT (ACE_GUARD_RETURN (ACE_Select_Reactor_Token, + ace_mon, this->token_, -1)); + + int result = this->bit_ops (handle, mask, + this->suspend_set_, + ops); + if (result < 0) + return result; + + return this->bit_ops (handle, mask, + this->wait_set_, + ops); +} + void ACE_TP_Reactor::no_op_sleep_hook (void *) { |