00001
00002
00003
00004
00005 #include "ace/Reactor.h"
00006 #include "ace/Signal.h"
00007
00008 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00009
00010 template <class ACE_SELECT_REACTOR_TOKEN>
00011 ACE_INLINE int
00012 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::resume_handler (ACE_Event_Handler *h)
00013 {
00014 ACE_TRACE ("ACE_Select_Reactor_T::resume_handler");
00015 return this->resume_handler (h->get_handle ());
00016 }
00017
00018 template <class ACE_SELECT_REACTOR_TOKEN>
00019 ACE_INLINE int
00020 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::resume_handler (const ACE_Handle_Set &handles)
00021 {
00022 ACE_TRACE ("ACE_Select_Reactor_T::resume_handler");
00023 ACE_Handle_Set_Iterator handle_iter (handles);
00024 ACE_HANDLE h;
00025
00026 ACE_MT (ACE_GUARD_RETURN (ACE_SELECT_REACTOR_TOKEN, ace_mon, this->token_, -1));
00027
00028 while ((h = handle_iter ()) != ACE_INVALID_HANDLE)
00029 if (this->resume_i (h) == -1)
00030 return -1;
00031
00032 return 0;
00033 }
00034
00035 template <class ACE_SELECT_REACTOR_TOKEN>
00036 ACE_INLINE int
00037 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::suspend_handler (ACE_Event_Handler *h)
00038 {
00039 ACE_TRACE ("ACE_Select_Reactor_T::suspend_handler");
00040 return this->suspend_handler (h->get_handle ());
00041 }
00042
00043 template <class ACE_SELECT_REACTOR_TOKEN>
00044 ACE_INLINE int
00045 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::suspend_handler (const ACE_Handle_Set &handles)
00046 {
00047 ACE_TRACE ("ACE_Select_Reactor_T::suspend_handler");
00048 ACE_Handle_Set_Iterator handle_iter (handles);
00049 ACE_HANDLE h;
00050
00051 ACE_MT (ACE_GUARD_RETURN (ACE_SELECT_REACTOR_TOKEN, ace_mon, this->token_, -1));
00052
00053 while ((h = handle_iter ()) != ACE_INVALID_HANDLE)
00054 if (this->suspend_i (h) == -1)
00055 return -1;
00056
00057 return 0;
00058 }
00059
00060 template <class ACE_SELECT_REACTOR_TOKEN>
00061 ACE_INLINE int
00062 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::register_handler (int signum,
00063 ACE_Event_Handler *new_sh,
00064 ACE_Sig_Action *new_disp,
00065 ACE_Event_Handler **old_sh,
00066 ACE_Sig_Action *old_disp)
00067 {
00068 ACE_TRACE ("ACE_Select_Reactor_T::register_handler");
00069 return this->signal_handler_->register_handler (signum,
00070 new_sh, new_disp,
00071 old_sh, old_disp);
00072 }
00073
00074 #if defined (ACE_WIN32)
00075
00076 template <class ACE_SELECT_REACTOR_TOKEN>
00077 ACE_INLINE int
00078 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::register_handler (ACE_Event_Handler *,
00079 ACE_HANDLE )
00080 {
00081
00082 ACE_NOTSUP_RETURN (-1);
00083 }
00084
00085 #endif
00086
00087 template <class ACE_SELECT_REACTOR_TOKEN>
00088 ACE_INLINE int
00089 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::register_handler (ACE_HANDLE ,
00090 ACE_HANDLE ,
00091 ACE_Event_Handler *,
00092 ACE_Reactor_Mask )
00093 {
00094
00095 ACE_NOTSUP_RETURN (-1);
00096 }
00097
00098 template <class ACE_SELECT_REACTOR_TOKEN>
00099 ACE_INLINE int
00100 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::handler (int signum, ACE_Event_Handler **handler)
00101 {
00102 ACE_TRACE ("ACE_Select_Reactor_T::handler");
00103 return this->handler_i (signum, handler);
00104 }
00105
00106 template <class ACE_SELECT_REACTOR_TOKEN>
00107 ACE_INLINE int
00108 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::remove_handler (int signum,
00109 ACE_Sig_Action *new_disp,
00110 ACE_Sig_Action *old_disp,
00111 int sigkey)
00112 {
00113 ACE_TRACE ("ACE_Select_Reactor_T::remove_handler");
00114 return this->signal_handler_->remove_handler (signum, new_disp, old_disp, sigkey);
00115 }
00116
00117 template <class ACE_SELECT_REACTOR_TOKEN>
00118 ACE_INLINE int
00119 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::uses_event_associations (void)
00120 {
00121
00122
00123 return 0;
00124 }
00125
00126
00127
00128
00129
00130
00131 template <class ACE_SELECT_REACTOR_TOKEN> ACE_INLINE int
00132 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::ready_ops (ACE_Event_Handler *handler,
00133 ACE_Reactor_Mask mask,
00134 int ops)
00135 {
00136 ACE_TRACE ("ACE_Select_Reactor_T::ready_ops");
00137 return this->ready_ops (handler->get_handle (), mask, ops);
00138 }
00139
00140
00141
00142 template <class ACE_SELECT_REACTOR_TOKEN> ACE_INLINE int
00143 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::mask_ops (ACE_Event_Handler *handler,
00144 ACE_Reactor_Mask mask,
00145 int ops)
00146 {
00147 ACE_TRACE ("ACE_Select_Reactor_T::mask_ops");
00148 return this->mask_ops (handler->get_handle (), mask, ops);
00149 }
00150
00151 template <class ACE_SELECT_REACTOR_TOKEN> ACE_INLINE int
00152 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::schedule_wakeup (ACE_Event_Handler *eh,
00153 ACE_Reactor_Mask mask)
00154 {
00155 ACE_TRACE ("ACE_Select_Reactor_T::schedule_wakeup");
00156 return this->mask_ops (eh->get_handle (), mask, ACE_Reactor::ADD_MASK);
00157 }
00158
00159 template <class ACE_SELECT_REACTOR_TOKEN> ACE_INLINE int
00160 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::cancel_wakeup (ACE_Event_Handler *eh,
00161 ACE_Reactor_Mask mask)
00162 {
00163 ACE_TRACE ("ACE_Select_Reactor_T::cancel_wakeup");
00164 return this->mask_ops (eh->get_handle (), mask, ACE_Reactor::CLR_MASK);
00165 }
00166
00167 template <class ACE_SELECT_REACTOR_TOKEN> ACE_INLINE int
00168 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::schedule_wakeup (ACE_HANDLE handle,
00169 ACE_Reactor_Mask mask)
00170 {
00171 ACE_TRACE ("ACE_Select_Reactor_T::schedule_wakeup");
00172 return this->mask_ops (handle, mask, ACE_Reactor::ADD_MASK);
00173 }
00174
00175 template <class ACE_SELECT_REACTOR_TOKEN> ACE_INLINE int
00176 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::cancel_wakeup (ACE_HANDLE handle,
00177 ACE_Reactor_Mask mask)
00178 {
00179 ACE_TRACE ("ACE_Select_Reactor_T::cancel_wakeup");
00180 return this->mask_ops (handle, mask, ACE_Reactor::CLR_MASK);
00181 }
00182
00183 template <class ACE_SELECT_REACTOR_TOKEN> ACE_INLINE ACE_Lock &
00184 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::lock (void)
00185 {
00186 ACE_TRACE ("ACE_Select_Reactor_T::lock");
00187 return this->lock_adapter_;
00188 }
00189
00190 template <class ACE_SELECT_REACTOR_TOKEN> ACE_INLINE void
00191 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::wakeup_all_threads (void)
00192 {
00193
00194
00195 this->notify (0, ACE_Event_Handler::NULL_MASK, (ACE_Time_Value *) &ACE_Time_Value::zero);
00196 }
00197
00198 template <class ACE_SELECT_REACTOR_TOKEN> ACE_INLINE int
00199 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::alertable_handle_events (ACE_Time_Value *max_wait_time)
00200 {
00201 return this->handle_events (max_wait_time);
00202 }
00203
00204 template <class ACE_SELECT_REACTOR_TOKEN> ACE_INLINE int
00205 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::alertable_handle_events (ACE_Time_Value &max_wait_time)
00206 {
00207 return this->handle_events (max_wait_time);
00208 }
00209
00210 template <class ACE_SELECT_REACTOR_TOKEN> ACE_INLINE int
00211 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::deactivated (void)
00212 {
00213 return this->deactivated_;
00214 }
00215
00216 template <class ACE_SELECT_REACTOR_TOKEN> ACE_INLINE void
00217 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::deactivate (int do_stop)
00218 {
00219 {
00220 ACE_MT (ACE_GUARD (ACE_SELECT_REACTOR_TOKEN,
00221 ace_mon,
00222 this->token_));
00223 this->deactivated_ = do_stop;
00224 }
00225
00226 this->wakeup_all_threads ();
00227 }
00228
00229 template <class ACE_SELECT_REACTOR_TOKEN> ACE_INLINE size_t
00230 ACE_Select_Reactor_T<ACE_SELECT_REACTOR_TOKEN>::size (void) const
00231 {
00232 return this->handler_rep_.size ();
00233 }
00234
00235 ACE_END_VERSIONED_NAMESPACE_DECL