Mercurial > hg > nginx-vendor-1-0
comparison src/event/modules/ngx_devpoll_module.c @ 106:45f7329b4bd0 NGINX_0_3_0
nginx 0.3.0
*) Change: the 10-days live time limit of worker process was
eliminated. The limit was introduced because of millisecond timers
overflow.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Fri, 07 Oct 2005 00:00:00 +0400 |
parents | 45945fa8b8ba |
children | 408f195b3482 |
comparison
equal
deleted
inserted
replaced
105:531d62c2a28d | 106:45f7329b4bd0 |
---|---|
324 | 324 |
325 ngx_int_t | 325 ngx_int_t |
326 ngx_devpoll_process_events(ngx_cycle_t *cycle) | 326 ngx_devpoll_process_events(ngx_cycle_t *cycle) |
327 { | 327 { |
328 int events, revents; | 328 int events, revents; |
329 size_t n; | |
330 ngx_err_t err; | |
329 ngx_int_t i; | 331 ngx_int_t i; |
330 ngx_uint_t lock, accept_lock, expire; | 332 ngx_uint_t lock, accept_lock; |
331 size_t n; | 333 ngx_msec_t timer, delta; |
332 ngx_msec_t timer; | |
333 ngx_err_t err; | |
334 #if 0 | 334 #if 0 |
335 ngx_cycle_t **old_cycle; | 335 ngx_cycle_t **old_cycle; |
336 #endif | 336 #endif |
337 ngx_event_t *rev, *wev; | 337 ngx_event_t *rev, *wev; |
338 ngx_connection_t *c; | 338 ngx_connection_t *c; |
339 ngx_epoch_msec_t delta; | |
340 struct dvpoll dvp; | 339 struct dvpoll dvp; |
341 struct timeval tv; | 340 struct timeval tv; |
342 | 341 |
343 for ( ;; ) { | 342 timer = ngx_event_find_timer(); |
344 timer = ngx_event_find_timer(); | |
345 | |
346 if (timer != 0) { | |
347 break; | |
348 } | |
349 | |
350 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | |
351 "devpoll expired timer"); | |
352 | |
353 ngx_event_expire_timers((ngx_msec_t) | |
354 (ngx_elapsed_msec - ngx_old_elapsed_msec)); | |
355 } | |
356 | 343 |
357 /* NGX_TIMER_INFINITE == INFTIM */ | 344 /* NGX_TIMER_INFINITE == INFTIM */ |
358 | 345 |
359 if (timer == NGX_TIMER_INFINITE) { | |
360 expire = 0; | |
361 | |
362 } else { | |
363 expire = 1; | |
364 } | |
365 | |
366 ngx_old_elapsed_msec = ngx_elapsed_msec; | |
367 accept_lock = 0; | 346 accept_lock = 0; |
368 | 347 |
369 if (ngx_accept_mutex) { | 348 if (ngx_accept_mutex) { |
370 if (ngx_accept_disabled > 0) { | 349 if (ngx_accept_disabled > 0) { |
371 ngx_accept_disabled--; | 350 ngx_accept_disabled--; |
380 | 359 |
381 } else if (timer == NGX_TIMER_INFINITE | 360 } else if (timer == NGX_TIMER_INFINITE |
382 || timer > ngx_accept_mutex_delay) | 361 || timer > ngx_accept_mutex_delay) |
383 { | 362 { |
384 timer = ngx_accept_mutex_delay; | 363 timer = ngx_accept_mutex_delay; |
385 expire = 0; | |
386 } | 364 } |
387 } | 365 } |
388 } | 366 } |
389 | 367 |
390 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | 368 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
391 "devpoll timer: %d", timer); | 369 "devpoll timer: %M", timer); |
392 | 370 |
393 if (nchanges) { | 371 if (nchanges) { |
394 n = nchanges * sizeof(struct pollfd); | 372 n = nchanges * sizeof(struct pollfd); |
395 if (write(dp, change_list, n) != (ssize_t) n) { | 373 if (write(dp, change_list, n) != (ssize_t) n) { |
396 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, | 374 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, |
414 nchanges = 0; | 392 nchanges = 0; |
415 | 393 |
416 ngx_gettimeofday(&tv); | 394 ngx_gettimeofday(&tv); |
417 ngx_time_update(tv.tv_sec); | 395 ngx_time_update(tv.tv_sec); |
418 | 396 |
419 delta = ngx_elapsed_msec; | 397 delta = ngx_current_time; |
420 ngx_elapsed_msec = (ngx_epoch_msec_t) tv.tv_sec * 1000 | 398 ngx_current_time = (ngx_msec_t) tv.tv_sec * 1000 + tv.tv_usec / 1000; |
421 + tv.tv_usec / 1000 - ngx_start_msec; | |
422 | 399 |
423 if (err) { | 400 if (err) { |
424 ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT, | 401 ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT, |
425 cycle->log, err, "ioctl(DP_POLL) failed"); | 402 cycle->log, err, "ioctl(DP_POLL) failed"); |
426 ngx_accept_mutex_unlock(); | 403 ngx_accept_mutex_unlock(); |
427 return NGX_ERROR; | 404 return NGX_ERROR; |
428 } | 405 } |
429 | 406 |
430 if (timer != NGX_TIMER_INFINITE) { | 407 if (timer != NGX_TIMER_INFINITE) { |
431 delta = ngx_elapsed_msec - delta; | 408 delta = ngx_current_time - delta; |
432 | 409 |
433 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | 410 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
434 "devpoll timer: %d, delta: %d", timer, (int) delta); | 411 "devpoll timer: %M, delta: %M", timer, delta); |
435 } else { | 412 } else { |
436 if (events == 0) { | 413 if (events == 0) { |
437 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, | 414 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, |
438 "ioctl(DP_POLL) returned no events without timeout"); | 415 "ioctl(DP_POLL) returned no events without timeout"); |
439 ngx_accept_mutex_unlock(); | 416 ngx_accept_mutex_unlock(); |
552 | 529 |
553 if (lock) { | 530 if (lock) { |
554 ngx_mutex_unlock(ngx_posted_events_mutex); | 531 ngx_mutex_unlock(ngx_posted_events_mutex); |
555 } | 532 } |
556 | 533 |
557 if (expire && delta) { | 534 ngx_event_expire_timers(); |
558 ngx_event_expire_timers((ngx_msec_t) delta); | |
559 } | |
560 | 535 |
561 if (!ngx_threaded) { | 536 if (!ngx_threaded) { |
562 ngx_event_process_posted(cycle); | 537 ngx_event_process_posted(cycle); |
563 } | 538 } |
564 | 539 |