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 }