00001
00002
00003
00004
00005 #include "ace/Log_Msg.h"
00006
00007 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00008
00009 ACE_INLINE
00010 ACE_Dev_Poll_Event_Tuple::ACE_Dev_Poll_Event_Tuple (void)
00011 : event_handler (0),
00012 mask (ACE_Event_Handler::NULL_MASK),
00013 suspended (0)
00014 {
00015 }
00016
00017
00018
00019 #if 0
00020 ACE_INLINE
00021 ACE_Dev_Poll_Ready_Set::ACE_Dev_Poll_Ready_Set (void)
00022 : pfds (0),
00023 nfds (0)
00024 {
00025 }
00026 #endif
00027
00028
00029
00030 ACE_INLINE void
00031 ACE_Dev_Poll_Reactor_Handler_Repository::mask (ACE_HANDLE handle,
00032 ACE_Reactor_Mask mask)
00033 {
00034 ACE_TRACE ("ACE_Dev_Poll_Reactor_Handler_Repository::mask");
00035
00036
00037 if (this->handle_in_range (handle))
00038 this->handlers_[handle].mask = mask;
00039 }
00040
00041 ACE_INLINE ACE_Reactor_Mask
00042 ACE_Dev_Poll_Reactor_Handler_Repository::mask (ACE_HANDLE handle)
00043 {
00044 ACE_TRACE ("ACE_Dev_Poll_Reactor_Handler_Repository::mask");
00045
00046 ACE_Reactor_Mask mask = ACE_Event_Handler::NULL_MASK;
00047
00048
00049 if (this->handle_in_range (handle))
00050 mask = this->handlers_[handle].mask;
00051
00052 if (mask == ACE_Event_Handler::NULL_MASK)
00053 errno = ENOENT;
00054
00055 return mask;
00056 }
00057
00058 ACE_INLINE void
00059 ACE_Dev_Poll_Reactor_Handler_Repository::suspend (ACE_HANDLE handle)
00060 {
00061 ACE_TRACE ("ACE_Dev_Poll_Reactor_Handler_Repository::suspend");
00062
00063
00064 if (this->handle_in_range (handle))
00065 this->handlers_[handle].suspended = 1;
00066 }
00067
00068 ACE_INLINE void
00069 ACE_Dev_Poll_Reactor_Handler_Repository::resume (ACE_HANDLE handle)
00070 {
00071 ACE_TRACE ("ACE_Dev_Poll_Reactor_Handler_Repository::resume");
00072
00073
00074 if (this->handle_in_range (handle))
00075 this->handlers_[handle].suspended = 0;
00076 }
00077
00078 ACE_INLINE int
00079 ACE_Dev_Poll_Reactor_Handler_Repository::suspended (ACE_HANDLE handle) const
00080 {
00081 ACE_TRACE ("ACE_Dev_Poll_Reactor_Handler_Repository::suspended");
00082
00083 if (this->handle_in_range (handle))
00084 return this->handlers_[handle].suspended;
00085
00086 return -1;
00087 }
00088
00089 ACE_INLINE size_t
00090 ACE_Dev_Poll_Reactor_Handler_Repository::size (void) const
00091 {
00092 ACE_TRACE ("ACE_Dev_Poll_Reactor_Handler_Repository::size");
00093
00094 return this->max_size_;
00095 }
00096
00097
00098
00099 ACE_INLINE
00100 ACE_Dev_Poll_Handler_Guard::ACE_Dev_Poll_Handler_Guard
00101 (ACE_Event_Handler *eh,
00102 bool do_incr)
00103 : eh_ (eh),
00104 refcounted_ (false)
00105 {
00106 if (eh == 0)
00107 return;
00108
00109 this->refcounted_ =
00110 eh->reference_counting_policy ().value () ==
00111 ACE_Event_Handler::Reference_Counting_Policy::ENABLED;
00112
00113 if (do_incr && this->refcounted_)
00114 eh->add_reference ();
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142 }
00143
00144 ACE_INLINE
00145 ACE_Dev_Poll_Handler_Guard::~ACE_Dev_Poll_Handler_Guard (void)
00146 {
00147 if (this->refcounted_ && this->eh_ != 0)
00148 this->eh_->remove_reference ();
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158 }
00159
00160 ACE_INLINE void
00161 ACE_Dev_Poll_Handler_Guard::release (void)
00162 {
00163 this->eh_ = 0;
00164 }
00165
00166
00167
00168 ACE_INLINE int
00169 ACE_Dev_Poll_Reactor::upcall (ACE_Event_Handler *event_handler,
00170 int (ACE_Event_Handler::*callback)(ACE_HANDLE),
00171 ACE_HANDLE handle)
00172 {
00173
00174
00175
00176 int status = 0;
00177
00178 do
00179 {
00180 status = (event_handler->*callback) (handle);
00181 }
00182 while (status > 0);
00183
00184 return status;
00185 }
00186
00187
00188
00189
00190
00191
00192 ACE_INLINE
00193 ACE_Dev_Poll_Reactor::Token_Guard::Token_Guard (ACE_Dev_Poll_Reactor_Token &token)
00194
00195 : token_ (token),
00196 owner_ (0)
00197 {
00198 }
00199
00200 ACE_INLINE
00201 ACE_Dev_Poll_Reactor::Token_Guard::~Token_Guard (void)
00202 {
00203 if (this->owner_ == 1)
00204 {
00205 ACE_MT (this->token_.release ());
00206 this->owner_ = 0;
00207 }
00208 }
00209
00210 ACE_INLINE void
00211 ACE_Dev_Poll_Reactor::Token_Guard::release_token (void)
00212 {
00213 if (this->owner_)
00214 {
00215 ACE_MT (this->token_.release ());
00216
00217
00218 this->owner_ = 0;
00219 }
00220 }
00221
00222 ACE_INLINE int
00223 ACE_Dev_Poll_Reactor::Token_Guard::is_owner (void)
00224 {
00225 return this->owner_;
00226 }
00227
00228 ACE_END_VERSIONED_NAMESPACE_DECL