mirror of
https://github.com/nginx/nginx.git
synced 2025-01-19 01:42:58 +08:00
1b73583ba2
*) Bugfix: on Solaris and Linux there may be too many "recvmsg() returned not enough data" alerts. *) Bugfix: there were the "writev() failed (22: Invalid argument)" errors on Solaris in proxy mode without sendfile. On other platforms that do not support sendfile at all the process got caught in an endless loop. *) Bugfix: segmentation fault on Solaris in proxy mode and using sendfile. *) Bugfix: segmentation fault on Solaris. *) Bugfix: on-line upgrade did not work on Linux. *) Bugfix: the ngx_http_autoindex_module module did not escape the spaces, the quotes, and the percent signs in the directory listing. *) Change: the decrease of the copy operations. *) Feature: the userid_p3p directive.
70 lines
1.3 KiB
C
70 lines
1.3 KiB
C
|
|
/*
|
|
* 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;
|
|
}
|