nginx 0.7.4
[nginx-catap.git] / src / event / ngx_event_mutex.c
blob2335e5bafd0f8f6134bc17234f10d5b01b0ceb53
2 /*
3 * Copyright (C) Igor Sysoev
4 */
7 #include <ngx_config.h>
8 #include <ngx_core.h>
9 #include <ngx_event.h>
12 ngx_int_t ngx_event_mutex_timedlock(ngx_event_mutex_t *m, ngx_msec_t timer,
13 ngx_event_t *ev)
15 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
16 "lock event mutex %p lock:%XD", m, m->lock);
18 if (m->lock) {
20 if (m->events == NULL) {
21 m->events = ev;
23 } else {
24 m->last->next = ev;
27 m->last = ev;
28 ev->next = NULL;
30 #if (NGX_THREADS0)
31 ev->light = 1;
32 #endif
34 ngx_add_timer(ev, timer);
36 return NGX_AGAIN;
39 m->lock = 1;
41 return NGX_OK;
45 ngx_int_t ngx_event_mutex_unlock(ngx_event_mutex_t *m, ngx_log_t *log)
47 ngx_event_t *ev;
49 if (m->lock == 0) {
50 ngx_log_error(NGX_LOG_ALERT, log, 0,
51 "tring to unlock the free event mutex %p", m);
52 return NGX_ERROR;
55 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
56 "unlock event mutex %p, next event: %p", m, m->events);
58 m->lock = 0;
60 if (m->events) {
61 ev = m->events;
62 m->events = ev->next;
64 ev->next = (ngx_event_t *) ngx_posted_events;
65 ngx_posted_events = ev;
68 return NGX_OK;