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 }