summaryrefslogtreecommitdiff
path: root/ace/TP_Reactor.cpp
diff options
context:
space:
mode:
authorjxh <jxh@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1999-09-15 15:49:45 +0000
committerjxh <jxh@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1999-09-15 15:49:45 +0000
commit0f1fd23ae22d849daaf1b16d8cc44109b41f1979 (patch)
tree7bdf1f3ebe024e9c360f2cd34affa582b0ee7514 /ace/TP_Reactor.cpp
parenta5c741238aec8266ce6eb65c23c8e5a20ca7243e (diff)
downloadATCD-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.cpp20
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 *)
{