nginx/src/event/ngx_event_mutex.c

71 lines
1.3 KiB
C
Raw Normal View History

2002-08-16 01:20:26 +08:00
/*
* Copyright (C) Igor Sysoev
*/
2004-03-01 05:03:02 +08:00
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
2002-08-16 01:20:26 +08:00
2004-03-01 05:03:02 +08:00
ngx_int_t ngx_event_mutex_timedlock(ngx_event_mutex_t *m, ngx_msec_t timer,
ngx_event_t *ev)
2002-08-16 01:20:26 +08:00
{
2004-03-01 05:03:02 +08:00
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
"lock event mutex " PTR_FMT " lock:%X", m, m->lock);
2002-08-16 01:20:26 +08:00
2004-03-01 05:03:02 +08:00
if (m->lock) {
if (m->events == NULL) {
m->events = ev;
} else {
m->last->next = ev;
}
m->last = ev;
ev->next = NULL;
2004-03-02 00:45:48 +08:00
#if (NGX_THREADS0)
2004-03-01 05:03:02 +08:00
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 " PTR_FMT, m);
return NGX_ERROR;
}
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
"unlock event mutex " PTR_FMT ", next event: " PTR_FMT,
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;
2002-08-16 01:20:26 +08:00
}