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