Mercurial > hg > nginx-vendor-current
comparison src/event/modules/ngx_epoll_module.c @ 622:8dc007eddbcf NGINX_1_0_1
nginx 1.0.1
*) Change: now the "split_clients" directive uses MurmurHash2 algorithm
because of better distribution.
Thanks to Oleg Mamontov.
*) Change: now long strings starting with zero are not considered as
false values.
Thanks to Maxim Dounin.
*) Change: now nginx uses a default listen backlog value 511 on Linux.
*) Feature: the $upstream_... variables may be used in the SSI and perl
modules.
*) Bugfix: now nginx limits better disk cache size.
Thanks to Oleg Mamontov.
*) Bugfix: a segmentation fault might occur while parsing incorrect
IPv4 address; the bug had appeared in 0.9.3.
Thanks to Maxim Dounin.
*) Bugfix: nginx could not be built by gcc 4.6 without --with-debug
option.
*) Bugfix: nginx could not be built on Solaris 9 and earlier; the bug
had appeared in 0.9.3.
Thanks to Dagobert Michelsen.
*) Bugfix: $request_time variable had invalid values if subrequests
were used; the bug had appeared in 0.8.47.
Thanks to Igor A. Valcov.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Tue, 03 May 2011 00:00:00 +0400 |
parents | be4f34123024 |
children | eb208e0cf44d |
comparison
equal
deleted
inserted
replaced
621:00d13b6d4ebd | 622:8dc007eddbcf |
---|---|
516 int events; | 516 int events; |
517 uint32_t revents; | 517 uint32_t revents; |
518 ngx_int_t instance, i; | 518 ngx_int_t instance, i; |
519 ngx_uint_t level; | 519 ngx_uint_t level; |
520 ngx_err_t err; | 520 ngx_err_t err; |
521 ngx_log_t *log; | |
522 ngx_event_t *rev, *wev, **queue; | 521 ngx_event_t *rev, *wev, **queue; |
523 ngx_connection_t *c; | 522 ngx_connection_t *c; |
524 | 523 |
525 /* NGX_TIMER_INFINITE == INFTIM */ | 524 /* NGX_TIMER_INFINITE == INFTIM */ |
526 | 525 |
563 return NGX_ERROR; | 562 return NGX_ERROR; |
564 } | 563 } |
565 | 564 |
566 ngx_mutex_lock(ngx_posted_events_mutex); | 565 ngx_mutex_lock(ngx_posted_events_mutex); |
567 | 566 |
568 log = cycle->log; | |
569 | |
570 for (i = 0; i < events; i++) { | 567 for (i = 0; i < events; i++) { |
571 c = event_list[i].data.ptr; | 568 c = event_list[i].data.ptr; |
572 | 569 |
573 instance = (uintptr_t) c & 1; | 570 instance = (uintptr_t) c & 1; |
574 c = (ngx_connection_t *) ((uintptr_t) c & (uintptr_t) ~1); | 571 c = (ngx_connection_t *) ((uintptr_t) c & (uintptr_t) ~1); |
585 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | 582 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
586 "epoll: stale event %p", c); | 583 "epoll: stale event %p", c); |
587 continue; | 584 continue; |
588 } | 585 } |
589 | 586 |
590 #if (NGX_DEBUG0) | |
591 log = c->log ? c->log : cycle->log; | |
592 #endif | |
593 | |
594 revents = event_list[i].events; | 587 revents = event_list[i].events; |
595 | 588 |
596 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, log, 0, | 589 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
597 "epoll: fd:%d ev:%04XD d:%p", | 590 "epoll: fd:%d ev:%04XD d:%p", |
598 c->fd, revents, event_list[i].data.ptr); | 591 c->fd, revents, event_list[i].data.ptr); |
599 | 592 |
600 if (revents & (EPOLLERR|EPOLLHUP)) { | 593 if (revents & (EPOLLERR|EPOLLHUP)) { |
601 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0, | 594 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
602 "epoll_wait() error on fd:%d ev:%04XD", | 595 "epoll_wait() error on fd:%d ev:%04XD", |
603 c->fd, revents); | 596 c->fd, revents); |
604 } | 597 } |
605 | 598 |
606 #if 0 | 599 #if 0 |
607 if (revents & ~(EPOLLIN|EPOLLOUT|EPOLLERR|EPOLLHUP)) { | 600 if (revents & ~(EPOLLIN|EPOLLOUT|EPOLLERR|EPOLLHUP)) { |
608 ngx_log_error(NGX_LOG_ALERT, log, 0, | 601 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, |
609 "strange epoll_wait() events fd:%d ev:%04XD", | 602 "strange epoll_wait() events fd:%d ev:%04XD", |
610 c->fd, revents); | 603 c->fd, revents); |
611 } | 604 } |
612 #endif | 605 #endif |
613 | 606 |