0
|
1
|
|
2 /*
|
|
3 * Copyright (C) Igor Sysoev
|
660
|
4 * Copyright (C) Nginx, Inc.
|
0
|
5 */
|
|
6
|
|
7
|
|
8 #include <ngx_config.h>
|
|
9 #include <ngx_core.h>
|
|
10 #include <ngx_event.h>
|
|
11
|
|
12
|
|
13 ngx_int_t ngx_event_mutex_timedlock(ngx_event_mutex_t *m, ngx_msec_t timer,
|
|
14 ngx_event_t *ev)
|
|
15 {
|
|
16 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
|
10
|
17 "lock event mutex %p lock:%XD", m, m->lock);
|
0
|
18
|
|
19 if (m->lock) {
|
|
20
|
|
21 if (m->events == NULL) {
|
|
22 m->events = ev;
|
|
23
|
|
24 } else {
|
|
25 m->last->next = ev;
|
|
26 }
|
|
27
|
|
28 m->last = ev;
|
|
29 ev->next = NULL;
|
|
30
|
|
31 #if (NGX_THREADS0)
|
|
32 ev->light = 1;
|
|
33 #endif
|
|
34
|
|
35 ngx_add_timer(ev, timer);
|
|
36
|
|
37 return NGX_AGAIN;
|
|
38 }
|
|
39
|
|
40 m->lock = 1;
|
|
41
|
|
42 return NGX_OK;
|
|
43 }
|
|
44
|
|
45
|
|
46 ngx_int_t ngx_event_mutex_unlock(ngx_event_mutex_t *m, ngx_log_t *log)
|
|
47 {
|
|
48 ngx_event_t *ev;
|
|
49
|
|
50 if (m->lock == 0) {
|
|
51 ngx_log_error(NGX_LOG_ALERT, log, 0,
|
10
|
52 "tring to unlock the free event mutex %p", m);
|
0
|
53 return NGX_ERROR;
|
|
54 }
|
|
55
|
|
56 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
|
10
|
57 "unlock event mutex %p, next event: %p", m, m->events);
|
0
|
58
|
|
59 m->lock = 0;
|
|
60
|
|
61 if (m->events) {
|
|
62 ev = m->events;
|
|
63 m->events = ev->next;
|
|
64
|
|
65 ev->next = (ngx_event_t *) ngx_posted_events;
|
|
66 ngx_posted_events = ev;
|
|
67 }
|
|
68
|
|
69 return NGX_OK;
|
|
70 }
|