Mercurial > hg > nginx-ranges
comparison src/event/ngx_event_mutex.c @ 0:f0b350454894 NGINX_0_1_0
nginx 0.1.0
*) The first public version.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Mon, 04 Oct 2004 00:00:00 +0400 |
parents | |
children | 46833bd150cb |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:f0b350454894 |
---|---|
1 | |
2 /* | |
3 * Copyright (C) Igor Sysoev | |
4 */ | |
5 | |
6 | |
7 #include <ngx_config.h> | |
8 #include <ngx_core.h> | |
9 #include <ngx_event.h> | |
10 | |
11 | |
12 ngx_int_t ngx_event_mutex_timedlock(ngx_event_mutex_t *m, ngx_msec_t timer, | |
13 ngx_event_t *ev) | |
14 { | |
15 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0, | |
16 "lock event mutex " PTR_FMT " lock:%X", m, m->lock); | |
17 | |
18 if (m->lock) { | |
19 | |
20 if (m->events == NULL) { | |
21 m->events = ev; | |
22 | |
23 } else { | |
24 m->last->next = ev; | |
25 } | |
26 | |
27 m->last = ev; | |
28 ev->next = NULL; | |
29 | |
30 #if (NGX_THREADS0) | |
31 ev->light = 1; | |
32 #endif | |
33 | |
34 ngx_add_timer(ev, timer); | |
35 | |
36 return NGX_AGAIN; | |
37 } | |
38 | |
39 m->lock = 1; | |
40 | |
41 return NGX_OK; | |
42 } | |
43 | |
44 | |
45 ngx_int_t ngx_event_mutex_unlock(ngx_event_mutex_t *m, ngx_log_t *log) | |
46 { | |
47 ngx_event_t *ev; | |
48 | |
49 if (m->lock == 0) { | |
50 ngx_log_error(NGX_LOG_ALERT, log, 0, | |
51 "tring to unlock the free event mutex " PTR_FMT, m); | |
52 return NGX_ERROR; | |
53 } | |
54 | |
55 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0, | |
56 "unlock event mutex " PTR_FMT ", next event: " PTR_FMT, | |
57 m, m->events); | |
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 } |