summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog-99b7
-rw-r--r--ace/XtReactor.cpp130
-rw-r--r--ace/XtReactor.h3
3 files changed, 76 insertions, 64 deletions
diff --git a/ChangeLog-99b b/ChangeLog-99b
index 3cacf1df216..0c171287134 100644
--- a/ChangeLog-99b
+++ b/ChangeLog-99b
@@ -1,3 +1,10 @@
+Thu Apr 22 13:26:26 1999 Irfan Pyarali <irfan@cs.wustl.edu>
+
+ * ace/XtReactor.cpp (remove_handler_i): In the registration phase,
+ we registered first with ACE_Select_Reactor and then with X.
+ Now we are now doing things in reverse order. Thanks to JM
+ Strauss <jms97@club-internet.fr> for contributing these changes.
+
Thu Apr 22 13:23:00 1999 Chris Gill <cdgill@cs.wustl.edu>
* include/makeinclude/platform_psos_diab_ppc.GNU: commented out -g
diff --git a/ace/XtReactor.cpp b/ace/XtReactor.cpp
index aed4161ad09..8acce2bdf4a 100644
--- a/ace/XtReactor.cpp
+++ b/ace/XtReactor.cpp
@@ -14,8 +14,8 @@ ACE_ALLOC_HOOK_DEFINE (ACE_XtReactor)
// Must be called with lock held
ACE_XtReactor::ACE_XtReactor (XtAppContext context,
- size_t size,
- int restart,
+ size_t size,
+ int restart,
ACE_Sig_Handler *h)
: ACE_Select_Reactor (size, restart, h),
context_ (context),
@@ -54,22 +54,22 @@ ACE_XtReactor::~ACE_XtReactor (void)
// This is just the <wait_for_multiple_events> from ace/Reactor.cpp
// but we use the Xt functions to wait for an event, not <select>
-int
+int
ACE_XtReactor::wait_for_multiple_events (ACE_Select_Reactor_Handle_Set &handle_set,
ACE_Time_Value *max_wait_time)
{
ACE_TRACE ("ACE_XtReactor::wait_for_multiple_events");
int nfound;
- do
+ do
{
max_wait_time = this->timer_queue_->calculate_timeout (max_wait_time);
-
+
size_t width = this->handler_rep_.max_handlep1 ();
handle_set.rd_mask_ = this->wait_set_.rd_mask_;
handle_set.wr_mask_ = this->wait_set_.wr_mask_;
handle_set.ex_mask_ = this->wait_set_.ex_mask_;
- nfound = XtWaitForMultipleEvents (width,
+ nfound = XtWaitForMultipleEvents (width,
handle_set,
max_wait_time);
@@ -86,7 +86,7 @@ ACE_XtReactor::wait_for_multiple_events (ACE_Select_Reactor_Handle_Set &handle_s
return nfound; // Timed out or input available
}
-void
+void
ACE_XtReactor::TimerCallbackProc (XtPointer closure, XtIntervalId *id)
{
ACE_XtReactor *self = (ACE_XtReactor *) closure;
@@ -102,21 +102,21 @@ ACE_XtReactor::TimerCallbackProc (XtPointer closure, XtIntervalId *id)
// about to get. Here we use <select> to find out which one might be
// available.
-void
-ACE_XtReactor::InputCallbackProc (XtPointer closure,
- int *source,
+void
+ACE_XtReactor::InputCallbackProc (XtPointer closure,
+ int *source,
XtInputId *)
{
ACE_XtReactor *self = (ACE_XtReactor *) closure;
ACE_HANDLE handle = (ACE_HANDLE) *source;
// my copy isn't const.
- ACE_Time_Value zero = ACE_Time_Value::zero;
+ ACE_Time_Value zero = ACE_Time_Value::zero;
ACE_Select_Reactor_Handle_Set wait_set;
// Deal with one file event.
-
+
// - read which kind of event
if (self->wait_set_.rd_mask_.is_set (handle))
wait_set.rd_mask_.set_bit (handle);
@@ -146,8 +146,8 @@ ACE_XtReactor::InputCallbackProc (XtPointer closure,
}
}
-int
-ACE_XtReactor::XtWaitForMultipleEvents (int width,
+int
+ACE_XtReactor::XtWaitForMultipleEvents (int width,
ACE_Select_Reactor_Handle_Set &wait_set,
ACE_Time_Value *)
{
@@ -157,10 +157,10 @@ ACE_XtReactor::XtWaitForMultipleEvents (int width,
// Check to make sure our handle's are all usable.
ACE_Select_Reactor_Handle_Set temp_set = wait_set;
- if (ACE_OS::select (width,
- temp_set.rd_mask_,
- temp_set.wr_mask_,
- temp_set.ex_mask_,
+ if (ACE_OS::select (width,
+ temp_set.rd_mask_,
+ temp_set.wr_mask_,
+ temp_set.ex_mask_,
(ACE_Time_Value *) &ACE_Time_Value::zero) == -1)
return -1; // Bad file arguments...
@@ -176,26 +176,26 @@ ACE_XtReactor::XtWaitForMultipleEvents (int width,
// Now actually read the result needed by the <Select_Reactor> using
// <select>.
return ACE_OS::select (width,
- wait_set.rd_mask_,
- wait_set.wr_mask_,
- wait_set.ex_mask_,
+ wait_set.rd_mask_,
+ wait_set.wr_mask_,
+ wait_set.ex_mask_,
(ACE_Time_Value *) &ACE_Time_Value::zero);
}
-XtAppContext
+XtAppContext
ACE_XtReactor::context (void) const
{
- return this->context_;
+ return this->context_;
}
-void
+void
ACE_XtReactor::context (XtAppContext context)
{
this->context_ = context;
}
int
-ACE_XtReactor::register_handler_i (ACE_HANDLE handle,
+ACE_XtReactor::register_handler_i (ACE_HANDLE handle,
ACE_Event_Handler *handler,
ACE_Reactor_Mask mask)
{
@@ -249,10 +249,10 @@ ACE_XtReactor::register_handler_i (ACE_HANDLE handle,
{
::XtRemoveInput (XtID->id_);
- XtID->id_ = ::XtAppAddInput (this->context_,
- (int) handle,
- (XtPointer) condition,
- InputCallbackProc,
+ XtID->id_ = ::XtAppAddInput (this->context_,
+ (int) handle,
+ (XtPointer) condition,
+ InputCallbackProc,
(XtPointer) this);
return 0;
}
@@ -266,9 +266,9 @@ ACE_XtReactor::register_handler_i (ACE_HANDLE handle,
XtID->next_ = this->ids_;
XtID->handle_ = handle;
XtID->id_ = ::XtAppAddInput (this->context_,
- (int) handle,
- (XtPointer) condition,
- InputCallbackProc,
+ (int) handle,
+ (XtPointer) condition,
+ InputCallbackProc,
(XtPointer) this);
this->ids_ = XtID;
}
@@ -276,8 +276,8 @@ ACE_XtReactor::register_handler_i (ACE_HANDLE handle,
}
int
-ACE_XtReactor::register_handler_i (const ACE_Handle_Set &handles,
- ACE_Event_Handler *handler,
+ACE_XtReactor::register_handler_i (const ACE_Handle_Set &handles,
+ ACE_Event_Handler *handler,
ACE_Reactor_Mask mask)
{
return ACE_Select_Reactor::register_handler_i (handles,
@@ -286,13 +286,27 @@ ACE_XtReactor::register_handler_i (const ACE_Handle_Set &handles,
}
int
-ACE_XtReactor::remove_handler_i (ACE_HANDLE handle,
+ACE_XtReactor::remove_handler_i (ACE_HANDLE handle,
ACE_Reactor_Mask mask)
{
ACE_TRACE ("ACE_XtReactor::remove_handler_i");
- int result = ACE_Select_Reactor::remove_handler_i (handle,
- mask);
+ // In the registration phase we registered first with
+ // ACE_Select_Reactor and then with X. Now we are now doing things
+ // in reverse order.
+
+ // First clean up the corresponding X11Input.
+ this->remove_XtInput (handle);
+
+ // Now let the reactor do its work.
+ return ACE_Select_Reactor::remove_handler_i (handle,
+ mask);
+}
+
+void
+ACE_XtReactor::remove_XtInput (ACE_HANDLE handle)
+{
+ ACE_TRACE ("ACE_XtReactor::remove_XtInput");
ACE_XtReactorID *XtID = this->ids_;
@@ -303,10 +317,7 @@ ACE_XtReactor::remove_handler_i (ACE_HANDLE handle,
::XtRemoveInput (XtID->id_);
this->ids_ = XtID->next_;
delete XtID;
- if (result == -1)
- return result;
- else
- return 0;
+ return;
}
ACE_XtReactorID *NextID = XtID->next_;
@@ -318,11 +329,7 @@ ACE_XtReactor::remove_handler_i (ACE_HANDLE handle,
::XtRemoveInput(NextID->id_);
XtID->next_ = NextID->next_;
delete NextID;
-
- if (result == -1)
- return result;
- else
- return 0;
+ return;
}
else
{
@@ -331,25 +338,20 @@ ACE_XtReactor::remove_handler_i (ACE_HANDLE handle,
}
}
}
-
- if (result == -1)
- return result;
- else
- return 0;
}
-int
-ACE_XtReactor::remove_handler_i (const ACE_Handle_Set &handles,
+int
+ACE_XtReactor::remove_handler_i (const ACE_Handle_Set &handles,
ACE_Reactor_Mask mask)
{
- return ACE_Select_Reactor::remove_handler_i (handles,
+ return ACE_Select_Reactor::remove_handler_i (handles,
mask);
}
// The following functions ensure that there is an Xt timeout for the
// first timeout in the Reactor's Timer_Queue.
-void
+void
ACE_XtReactor::reset_timeout (void)
{
// Make sure we have a valid context
@@ -359,20 +361,20 @@ ACE_XtReactor::reset_timeout (void)
::XtRemoveTimeOut (timeout_);
timeout_ = 0;
- ACE_Time_Value *max_wait_time =
+ ACE_Time_Value *max_wait_time =
this->timer_queue_->calculate_timeout (0);
if (max_wait_time)
- timeout_ = ::XtAppAddTimeOut (this->context_,
- max_wait_time->msec (),
- TimerCallbackProc,
+ timeout_ = ::XtAppAddTimeOut (this->context_,
+ max_wait_time->msec (),
+ TimerCallbackProc,
(XtPointer) this);
}
long
-ACE_XtReactor::schedule_timer (ACE_Event_Handler *handler,
+ACE_XtReactor::schedule_timer (ACE_Event_Handler *handler,
const void *arg,
- const ACE_Time_Value &delta_time,
+ const ACE_Time_Value &delta_time,
const ACE_Time_Value &interval)
{
ACE_TRACE ("ACE_XtReactor::schedule_timer");
@@ -397,7 +399,7 @@ ACE_XtReactor::cancel_timer (ACE_Event_Handler *handler,
{
ACE_TRACE ("ACE_XtReactor::cancel_timer");
- if (ACE_Select_Reactor::cancel_timer (handler,
+ if (ACE_Select_Reactor::cancel_timer (handler,
dont_call_handle_close) == -1)
return -1;
else
@@ -408,13 +410,13 @@ ACE_XtReactor::cancel_timer (ACE_Event_Handler *handler,
}
int
-ACE_XtReactor::cancel_timer (long timer_id,
+ACE_XtReactor::cancel_timer (long timer_id,
const void **arg,
int dont_call_handle_close)
{
ACE_TRACE ("ACE_XtReactor::cancel_timer");
- if (ACE_Select_Reactor::cancel_timer (timer_id,
+ if (ACE_Select_Reactor::cancel_timer (timer_id,
arg,
dont_call_handle_close) == -1)
return -1;
diff --git a/ace/XtReactor.h b/ace/XtReactor.h
index b2f86dc5d1f..2895626357c 100644
--- a/ace/XtReactor.h
+++ b/ace/XtReactor.h
@@ -96,6 +96,9 @@ protected:
ACE_Reactor_Mask);
// Remove a set of <handles>.
+ virtual void remove_XtInput (ACE_HANDLE handle);
+ // Removes an Xt handle.
+
virtual int wait_for_multiple_events (ACE_Select_Reactor_Handle_Set &,
ACE_Time_Value *);
// Wait for events to occur.