Mercurial > hg > nginx-vendor-current
diff src/event/ngx_event_accept.c @ 236:c982febb7588 NGINX_0_4_3
nginx 0.4.3
*) Change: now the 499 error could not be redirected using an
"error_page" directive.
*) Feature: the Solaris 10 event ports support.
*) Feature: the ngx_http_browser_module.
*) Bugfix: a segmentation fault may occur while redirecting the 400
error to the proxied server using an "proxy_pass" directive.
*) Bugfix: a segmentation fault occurred if an unix domain socket was
used in an "proxy_pass" directive; bug appeared in 0.3.47.
*) Bugfix: SSI did work with memcached and nonbuffered responses.
*) Workaround: of the Sun Studio PAUSE hardware capability bug.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Tue, 26 Sep 2006 00:00:00 +0400 |
parents | 0ad9eeb6ac7f |
children | 984bb0b1399b |
line wrap: on
line diff
--- a/src/event/ngx_event_accept.c +++ b/src/event/ngx_event_accept.c @@ -21,7 +21,7 @@ static void ngx_close_accepted_connectio void ngx_event_accept(ngx_event_t *ev) { - socklen_t sl; + socklen_t socklen; ngx_err_t err; ngx_log_t *log; ngx_socket_t s; @@ -48,14 +48,16 @@ ngx_event_accept(ngx_event_t *ev) "accept on %V, ready: %d", &ls->addr_text, ev->available); do { - sl = NGX_SOCKLEN; + socklen = NGX_SOCKLEN; - s = accept(lc->fd, (struct sockaddr *) sa, &sl); + s = accept(lc->fd, (struct sockaddr *) sa, &socklen); if (s == -1) { err = ngx_socket_errno; if (err == NGX_EAGAIN) { + ngx_log_debug0(NGX_LOG_DEBUG_EVENT, ev->log, err, + "accept() not ready"); return; } @@ -104,13 +106,13 @@ ngx_event_accept(ngx_event_t *ev) return; } - c->sockaddr = ngx_palloc(c->pool, sl); + c->sockaddr = ngx_palloc(c->pool, socklen); if (c->sockaddr == NULL) { ngx_close_accepted_connection(c); return; } - ngx_memcpy(c->sockaddr, sa, sl); + ngx_memcpy(c->sockaddr, sa, socklen); log = ngx_palloc(c->pool, sizeof(ngx_log_t)); if (log == NULL) { @@ -152,7 +154,7 @@ ngx_event_accept(ngx_event_t *ev) c->pool->log = log; c->listening = ls; - c->socklen = sl; + c->socklen = socklen; c->unexpected_eof = 1; @@ -264,7 +266,10 @@ ngx_trylock_accept_mutex(ngx_cycle_t *cy ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "accept mutex locked"); - if (ngx_accept_mutex_held && !(ngx_event_flags & NGX_USE_RTSIG_EVENT)) { + if (ngx_accept_mutex_held + && ngx_accept_events == 0 + && !(ngx_event_flags & NGX_USE_RTSIG_EVENT)) + { return NGX_OK; } @@ -273,11 +278,15 @@ ngx_trylock_accept_mutex(ngx_cycle_t *cy return NGX_ERROR; } + ngx_accept_events = 0; ngx_accept_mutex_held = 1; return NGX_OK; } + ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, + "accept mutex lock failed: %ui", ngx_accept_mutex_held); + if (ngx_accept_mutex_held) { if (ngx_disable_accept_events(cycle) == NGX_ERROR) { return NGX_ERROR;