blob: 4f83e4865233e7e956078e4612eb3736c636234c [file] [log] [blame]
Igor Sysoev0c331d92002-08-15 17:20:26 +00001
Igor Sysoevd94049b2004-02-29 21:03:02 +00002#include <ngx_config.h>
3#include <ngx_core.h>
4#include <ngx_event.h>
Igor Sysoev0c331d92002-08-15 17:20:26 +00005
6
Igor Sysoevd94049b2004-02-29 21:03:02 +00007ngx_int_t ngx_event_mutex_timedlock(ngx_event_mutex_t *m, ngx_msec_t timer,
8 ngx_event_t *ev)
Igor Sysoev0c331d92002-08-15 17:20:26 +00009{
Igor Sysoevd94049b2004-02-29 21:03:02 +000010 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
11 "lock event mutex " PTR_FMT " lock:%X", m, m->lock);
Igor Sysoev0c331d92002-08-15 17:20:26 +000012
Igor Sysoevd94049b2004-02-29 21:03:02 +000013 if (m->lock) {
14
15 if (m->events == NULL) {
16 m->events = ev;
17
18 } else {
19 m->last->next = ev;
20 }
21
22 m->last = ev;
23 ev->next = NULL;
24
Igor Sysoev83a7a2e2004-03-01 16:45:48 +000025#if (NGX_THREADS0)
Igor Sysoevd94049b2004-02-29 21:03:02 +000026 ev->light = 1;
27#endif
28
29 ngx_add_timer(ev, timer);
30
31 return NGX_AGAIN;
32 }
33
34 m->lock = 1;
35
36 return NGX_OK;
37}
38
39
40ngx_int_t ngx_event_mutex_unlock(ngx_event_mutex_t *m, ngx_log_t *log)
41{
42 ngx_event_t *ev;
43
44 if (m->lock == 0) {
45 ngx_log_error(NGX_LOG_ALERT, log, 0,
46 "tring to unlock the free event mutex " PTR_FMT, m);
47 return NGX_ERROR;
48 }
49
50 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
51 "unlock event mutex " PTR_FMT ", next event: " PTR_FMT,
52 m, m->events);
53
54 m->lock = 0;
55
56 if (m->events) {
57 ev = m->events;
58 m->events = ev->next;
59
60 ev->next = (ngx_event_t *) ngx_posted_events;
61 ngx_posted_events = ev;
62 }
63
64 return NGX_OK;
Igor Sysoev0c331d92002-08-15 17:20:26 +000065}