Mercurial > hg > nginx
comparison src/event/modules/ngx_iocp_module.c @ 557:ecd9c160f25b release-0.3.0
nginx-0.3.0-RELEASE import
*) Change: the 10-days live time limit of worker process was
eliminated. The limit was introduced because of millisecond timers
overflow.
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Fri, 07 Oct 2005 13:30:52 +0000 |
parents | b09ee85d0ac8 |
children | 9c2f3ed7a247 |
comparison
equal
deleted
inserted
replaced
556:21a706ff4e1f | 557:ecd9c160f25b |
---|---|
182 { | 182 { |
183 int rc; | 183 int rc; |
184 u_int key; | 184 u_int key; |
185 u_long bytes; | 185 u_long bytes; |
186 ngx_err_t err; | 186 ngx_err_t err; |
187 ngx_msec_t timer; | 187 ngx_msec_t timer, delta; |
188 ngx_event_t *ev; | 188 ngx_event_t *ev; |
189 struct timeval tv; | 189 struct timeval tv; |
190 ngx_epoch_msec_t delta; | |
191 ngx_event_ovlp_t *ovlp; | 190 ngx_event_ovlp_t *ovlp; |
192 | 191 |
193 timer = ngx_event_find_timer(); | 192 timer = ngx_event_find_timer(); |
194 ngx_old_elapsed_msec = ngx_elapsed_msec; | 193 |
195 | 194 if (timer == NGX_TIMER_INFINITE) { |
196 if (timer == 0) { | |
197 timer = INFINITE; | 195 timer = INFINITE; |
198 } | 196 } |
199 | 197 |
200 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "iocp timer: %d", timer); | 198 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "iocp timer: %M", timer); |
201 | 199 |
202 rc = GetQueuedCompletionStatus(iocp, &bytes, (LPDWORD) &key, | 200 rc = GetQueuedCompletionStatus(iocp, &bytes, (LPDWORD) &key, |
203 (LPOVERLAPPED *) &ovlp, timer); | 201 (LPOVERLAPPED *) &ovlp, (u_long) timer); |
204 | 202 |
205 if (rc == 0) { | 203 if (rc == 0) { |
206 err = ngx_errno; | 204 err = ngx_errno; |
207 } else { | 205 } else { |
208 err = 0; | 206 err = 0; |
212 ngx_time_update(tv.tv_sec); | 210 ngx_time_update(tv.tv_sec); |
213 | 211 |
214 ngx_log_debug4(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | 212 ngx_log_debug4(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
215 "iocp: %d b:%d k:%d ov:%p", rc, bytes, key, ovlp); | 213 "iocp: %d b:%d k:%d ov:%p", rc, bytes, key, ovlp); |
216 | 214 |
217 delta = ngx_elapsed_msec; | 215 delta = ngx_current_time; |
218 ngx_elapsed_msec = (ngx_epoch_msec_t) tv.tv_sec * 1000 | 216 ngx_current_time = (ngx_msec_t) tv.tv_sec * 1000 + tv.tv_usec / 1000; |
219 + tv.tv_usec / 1000 - ngx_start_msec; | |
220 | 217 |
221 if (timer != INFINITE) { | 218 if (timer != INFINITE) { |
222 delta = ngx_elapsed_msec - delta; | 219 delta = ngx_current_time - delta; |
223 | 220 |
224 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | 221 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
225 "iocp timer: %d, delta: %d", timer, (int) delta); | 222 "iocp timer: %M, delta: %M", timer, delta); |
226 } | 223 } |
227 | 224 |
228 if (err) { | 225 if (err) { |
229 if (ovlp == NULL) { | 226 if (ovlp == NULL) { |
230 if (err != WAIT_TIMEOUT) { | 227 if (err != WAIT_TIMEOUT) { |
232 "GetQueuedCompletionStatus() failed"); | 229 "GetQueuedCompletionStatus() failed"); |
233 | 230 |
234 return NGX_ERROR; | 231 return NGX_ERROR; |
235 } | 232 } |
236 | 233 |
237 if (timer != INFINITE && delta) { | 234 ngx_event_expire_timers(); |
238 ngx_event_expire_timers((ngx_msec_t) delta); | |
239 } | |
240 | 235 |
241 return NGX_OK; | 236 return NGX_OK; |
242 } | 237 } |
243 | 238 |
244 ovlp->error = err; | 239 ovlp->error = err; |
266 */ | 261 */ |
267 | 262 |
268 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, err, | 263 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, err, |
269 "iocp: aborted event %p", ev); | 264 "iocp: aborted event %p", ev); |
270 | 265 |
271 if (timer != INFINITE && delta) { | 266 ngx_event_expire_timers(); |
272 ngx_event_expire_timers((ngx_msec_t) delta); | |
273 } | |
274 | 267 |
275 return NGX_OK; | 268 return NGX_OK; |
276 } | 269 } |
277 | 270 |
278 if (err) { | 271 if (err) { |
302 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | 295 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
303 "iocp event handler: %p", ev->handler); | 296 "iocp event handler: %p", ev->handler); |
304 | 297 |
305 ev->handler(ev); | 298 ev->handler(ev); |
306 | 299 |
307 if (timer != INFINITE && delta) { | 300 ngx_event_expire_timers(); |
308 ngx_event_expire_timers((ngx_msec_t) delta); | |
309 } | |
310 | 301 |
311 return NGX_OK; | 302 return NGX_OK; |
312 } | 303 } |
313 | 304 |
314 | 305 |