Mercurial > hg > nginx
comparison src/event/modules/ngx_poll_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 | 511a89da35ad |
children | 9c2f3ed7a247 |
comparison
equal
deleted
inserted
replaced
556:21a706ff4e1f | 557:ecd9c160f25b |
---|---|
276 | 276 |
277 static ngx_int_t | 277 static ngx_int_t |
278 ngx_poll_process_events(ngx_cycle_t *cycle) | 278 ngx_poll_process_events(ngx_cycle_t *cycle) |
279 { | 279 { |
280 int ready, revents; | 280 int ready, revents; |
281 ngx_err_t err; | |
281 ngx_int_t i, nready; | 282 ngx_int_t i, nready; |
282 ngx_uint_t n, found, lock, expire; | 283 ngx_uint_t n, found, lock; |
283 ngx_msec_t timer; | 284 ngx_msec_t timer, delta; |
284 ngx_err_t err; | |
285 ngx_cycle_t **old_cycle; | 285 ngx_cycle_t **old_cycle; |
286 ngx_event_t *ev; | 286 ngx_event_t *ev; |
287 ngx_epoch_msec_t delta; | |
288 ngx_connection_t *c; | 287 ngx_connection_t *c; |
289 struct timeval tv; | 288 struct timeval tv; |
290 | 289 |
291 for ( ;; ) { | 290 timer = ngx_event_find_timer(); |
292 timer = ngx_event_find_timer(); | |
293 | |
294 if (timer != 0) { | |
295 break; | |
296 } | |
297 | |
298 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | |
299 "poll expired timer"); | |
300 | |
301 ngx_event_expire_timers((ngx_msec_t) | |
302 (ngx_elapsed_msec - ngx_old_elapsed_msec)); | |
303 } | |
304 | 291 |
305 /* NGX_TIMER_INFINITE == INFTIM */ | 292 /* NGX_TIMER_INFINITE == INFTIM */ |
306 | |
307 if (timer == NGX_TIMER_INFINITE) { | |
308 expire = 0; | |
309 | |
310 } else { | |
311 expire = 1; | |
312 } | |
313 | |
314 ngx_old_elapsed_msec = ngx_elapsed_msec; | |
315 | 293 |
316 #if (NGX_DEBUG0) | 294 #if (NGX_DEBUG0) |
317 if (cycle->log->log_level & NGX_LOG_DEBUG_ALL) { | 295 if (cycle->log->log_level & NGX_LOG_DEBUG_ALL) { |
318 for (i = 0; i < nevents; i++) { | 296 for (i = 0; i < nevents; i++) { |
319 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | 297 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
335 if (ngx_accept_mutex_held == 0 | 313 if (ngx_accept_mutex_held == 0 |
336 && (timer == NGX_TIMER_INFINITE | 314 && (timer == NGX_TIMER_INFINITE |
337 || timer > ngx_accept_mutex_delay)) | 315 || timer > ngx_accept_mutex_delay)) |
338 { | 316 { |
339 timer = ngx_accept_mutex_delay; | 317 timer = ngx_accept_mutex_delay; |
340 expire = 0; | |
341 } | 318 } |
342 } | 319 } |
343 } | 320 } |
344 | 321 |
345 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "poll timer: %d", timer); | 322 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "poll timer: %M", timer); |
346 | 323 |
347 ready = poll(event_list, (u_int) nevents, (int) timer); | 324 ready = poll(event_list, (u_int) nevents, (int) timer); |
348 | 325 |
349 if (ready == -1) { | 326 if (ready == -1) { |
350 err = ngx_errno; | 327 err = ngx_errno; |
353 } | 330 } |
354 | 331 |
355 ngx_gettimeofday(&tv); | 332 ngx_gettimeofday(&tv); |
356 ngx_time_update(tv.tv_sec); | 333 ngx_time_update(tv.tv_sec); |
357 | 334 |
358 delta = ngx_elapsed_msec; | 335 delta = ngx_current_time; |
359 ngx_elapsed_msec = (ngx_epoch_msec_t) tv.tv_sec * 1000 | 336 ngx_current_time = (ngx_msec_t) tv.tv_sec * 1000 + tv.tv_usec / 1000; |
360 + tv.tv_usec / 1000 - ngx_start_msec; | |
361 | 337 |
362 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | 338 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
363 "poll ready %d of %d", ready, nevents); | 339 "poll ready %d of %d", ready, nevents); |
364 | 340 |
365 if (err) { | 341 if (err) { |
368 ngx_accept_mutex_unlock(); | 344 ngx_accept_mutex_unlock(); |
369 return NGX_ERROR; | 345 return NGX_ERROR; |
370 } | 346 } |
371 | 347 |
372 if (timer != NGX_TIMER_INFINITE) { | 348 if (timer != NGX_TIMER_INFINITE) { |
373 delta = ngx_elapsed_msec - delta; | 349 delta = ngx_current_time - delta; |
374 | 350 |
375 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | 351 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
376 "poll timer: %d, delta: %d", timer, (int) delta); | 352 "poll timer: %M, delta: %M", timer, delta); |
377 } else { | 353 } else { |
378 if (ready == 0) { | 354 if (ready == 0) { |
379 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, | 355 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, |
380 "poll() returned no events without timeout"); | 356 "poll() returned no events without timeout"); |
381 ngx_accept_mutex_unlock(); | 357 ngx_accept_mutex_unlock(); |
591 | 567 |
592 if (ready != 0) { | 568 if (ready != 0) { |
593 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, "poll ready != events"); | 569 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, "poll ready != events"); |
594 } | 570 } |
595 | 571 |
596 if (expire && delta) { | 572 ngx_event_expire_timers(); |
597 ngx_event_expire_timers((ngx_msec_t) delta); | |
598 } | |
599 | 573 |
600 if (!ngx_threaded) { | 574 if (!ngx_threaded) { |
601 ngx_event_process_posted(cycle); | 575 ngx_event_process_posted(cycle); |
602 } | 576 } |
603 | 577 |