mirror of
https://github.com/nginx/nginx.git
synced 2024-12-14 12:09:00 +08:00
71 lines
1.3 KiB
C
71 lines
1.3 KiB
C
|
|
/*
|
|
* Copyright (C) Igor Sysoev
|
|
* Copyright (C) Nginx, Inc.
|
|
*/
|
|
|
|
|
|
#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;
|
|
}
|