Mercurial > hg > nginx-vendor-0-6
view src/event/ngx_event_mutex.c @ 384:09b703ae3ba5 NGINX_0_6_36
nginx 0.6.36
*) Change: now the "Invalid argument" error returned by
setsockopt(TCP_NODELAY) on Solaris, is ignored.
*) Change: now POSTs without "Content-Length" header line are allowed.
*) Feature: the "try_files" directive.
*) Feature: the --with-pcre option in the configure.
*) Feature: the "if_modified_since" directive.
*) Feature: the "$cookie_..." variables.
*) Feature: the "$arg_..." variables.
*) Bugfix: compatibility with Tru64 UNIX.
Thanks to Dustin Marquess.
*) Bugfix: a "ssl_engine" directive did not use a SSL-accelerator for
asymmetric ciphers.
Thanks to Marcin Gozdalik.
*) Bugfix: in a redirect rewrite directive original arguments were
concatenated with new arguments by a "?" rather than an "&";
the bug had appeared in 0.1.18.
Thanks to Maxim Dounin.
*) Bugfix: nginx could not be built on AIX.
*) Bugfix: a double response might be returned if the epoll or rtsig
methods are used and a redirect was returned to a request with
body.
Thanks to Eden Li.
*) Bugfix: a segmentation fault might occur in worker process if
"resolver" directive was used in SMTP proxy.
*) Bugfix: fastcgi_store stored files not always.
*) Bugfix: nginx did not process a FastCGI server response, if the
server send too many messages to stderr before response.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Thu, 02 Apr 2009 00:00:00 +0400 |
parents | 46833bd150cb |
children |
line wrap: on
line source
/* * Copyright (C) Igor Sysoev */ #include <ngx_config.h> #include <ngx_core.h> #include <ngx_event.h> ngx_int_t ngx_event_mutex_timedlock(ngx_event_mutex_t *m, ngx_msec_t timer, ngx_event_t *ev) { ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0, "lock event mutex %p lock:%XD", m, m->lock); if (m->lock) { if (m->events == NULL) { m->events = ev; } else { m->last->next = ev; } m->last = ev; ev->next = NULL; #if (NGX_THREADS0) ev->light = 1; #endif ngx_add_timer(ev, timer); return NGX_AGAIN; } m->lock = 1; return NGX_OK; } ngx_int_t ngx_event_mutex_unlock(ngx_event_mutex_t *m, ngx_log_t *log) { ngx_event_t *ev; if (m->lock == 0) { ngx_log_error(NGX_LOG_ALERT, log, 0, "tring to unlock the free event mutex %p", m); return NGX_ERROR; } ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0, "unlock event mutex %p, next event: %p", m, m->events); m->lock = 0; if (m->events) { ev = m->events; m->events = ev->next; ev->next = (ngx_event_t *) ngx_posted_events; ngx_posted_events = ev; } return NGX_OK; }