Mercurial > hg > nginx-quic
comparison src/event/ngx_event_mutex.c @ 272:d4e65d74db9f
nginx-0.0.2-2004-03-01-00:03:02 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Sun, 29 Feb 2004 21:03:02 +0000 |
parents | d220029ac7f3 |
children | 34329e143004 |
comparison
equal
deleted
inserted
replaced
271:e16dfb9b9afa | 272:d4e65d74db9f |
---|---|
1 | 1 |
2 spinlock_max depend on CPU number and mutex type. | 2 #include <ngx_config.h> |
3 1 CPU 1 | 3 #include <ngx_core.h> |
4 ngx_malloc_mutex 1000 ? | 4 #include <ngx_event.h> |
5 | 5 |
6 | 6 |
7 int ngx_event_mutex_trylock(ngx_mutex_t *mtx) | 7 ngx_int_t ngx_event_mutex_timedlock(ngx_event_mutex_t *m, ngx_msec_t timer, |
8 ngx_event_t *ev) | |
8 { | 9 { |
9 for(i = mtx->spinlock_max; i; i--) | 10 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0, |
10 if (trylock(mtx->lock)) | 11 "lock event mutex " PTR_FMT " lock:%X", m, m->lock); |
11 return 1; | |
12 | 12 |
13 return 0; | 13 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 | |
25 #if (NGX_THREADS) | |
26 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; | |
14 } | 37 } |
38 | |
39 | |
40 ngx_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; | |
65 } |