Mercurial > hg > nginx
comparison src/event/ngx_event_posted.c @ 377:41437e4fd9b4
nginx-0.0.7-2004-07-05-19:08:23 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Mon, 05 Jul 2004 15:08:23 +0000 |
parents | d0451e402e27 |
children | 73688d5d7fc3 |
comparison
equal
deleted
inserted
replaced
376:d0451e402e27 | 377:41437e4fd9b4 |
---|---|
26 return; | 26 return; |
27 } | 27 } |
28 | 28 |
29 ngx_delete_posted_event(ev); | 29 ngx_delete_posted_event(ev); |
30 | 30 |
31 #if 0 | |
32 /* do not check instance ??? */ | |
33 | |
34 if (ev->accept) { | |
35 continue; | |
36 } | |
37 #endif | |
38 | |
39 if (ev->closed | |
40 || (ev->use_instance && ev->instance != ev->returned_instance)) | |
41 { | |
42 /* | |
43 * the stale event from a file descriptor | |
44 * that was just closed in this iteration | |
45 */ | |
46 | |
47 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | |
48 "stale posted event " PTR_FMT, ev); | |
49 continue; | |
50 } | |
51 | |
52 ev->event_handler(ev); | 31 ev->event_handler(ev); |
53 } | 32 } |
54 } | 33 } |
55 | 34 |
56 | 35 |
57 #if (NGX_THREADS) | 36 #if (NGX_THREADS) |
58 | 37 |
59 void ngx_wakeup_worker_thread(ngx_cycle_t *cycle) | 38 void ngx_wakeup_worker_thread(ngx_cycle_t *cycle) |
60 { | 39 { |
61 ngx_int_t i; | 40 ngx_int_t i; |
41 ngx_uint_t busy; | |
42 ngx_event_t *ev; | |
43 | |
44 #if 0 | |
45 busy = 1; | |
46 | |
47 if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) { | |
48 return; | |
49 } | |
50 | |
51 for (ev = (ngx_event_t *) ngx_posted_events; ev; ev = ev->next) { | |
52 if (*(ev->lock) == 0) { | |
53 busy = 0; | |
54 break; | |
55 } | |
56 } | |
57 | |
58 ngx_mutex_unlock(ngx_posted_events_mutex); | |
59 | |
60 if (busy) { | |
61 return; | |
62 } | |
63 #endif | |
62 | 64 |
63 for (i = 0; i < ngx_threads_n; i++) { | 65 for (i = 0; i < ngx_threads_n; i++) { |
64 if (ngx_threads[i].state == NGX_THREAD_FREE) { | 66 if (ngx_threads[i].state == NGX_THREAD_FREE) { |
65 ngx_cond_signal(ngx_threads[i].cv); | 67 ngx_cond_signal(ngx_threads[i].cv); |
66 return; | 68 return; |
95 continue; | 97 continue; |
96 } | 98 } |
97 | 99 |
98 ngx_delete_posted_event(ev); | 100 ngx_delete_posted_event(ev); |
99 | 101 |
100 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | |
101 "event instance: c:%d i:%d r:%d", | |
102 ev->closed, ev->instance, ev->returned_instance); | |
103 | |
104 if (ev->closed | |
105 || (ev->use_instance && ev->instance != ev->returned_instance)) | |
106 { | |
107 /* | |
108 * The stale event from a file descriptor that was just | |
109 * closed in this iteration. We use ngx_cycle->log | |
110 * because ev->log may be already destoyed. | |
111 */ | |
112 | |
113 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, ngx_cycle->log, 0, | |
114 "stale posted event " PTR_FMT, ev); | |
115 | |
116 ngx_unlock(ev->lock); | |
117 | |
118 ev = ev->next; | |
119 | |
120 continue; | |
121 } | |
122 | |
123 ev->locked = 1; | 102 ev->locked = 1; |
124 | 103 |
125 ev->ready |= ev->posted_ready; | 104 ev->ready |= ev->posted_ready; |
126 ev->timedout |= ev->posted_timedout; | 105 ev->timedout |= ev->posted_timedout; |
127 ev->available |= ev->posted_available; | |
128 ev->pending_eof |= ev->posted_eof; | 106 ev->pending_eof |= ev->posted_eof; |
129 #if (HAVE_KQUEUE) | 107 #if (HAVE_KQUEUE) |
130 ev->kq_errno |= ev->posted_errno; | 108 ev->kq_errno |= ev->posted_errno; |
131 #endif | 109 #endif |
110 if (ev->posted_available) { | |
111 ev->available = ev->posted_available; | |
112 } | |
132 | 113 |
133 ev->posted_ready = 0; | 114 ev->posted_ready = 0; |
134 ev->posted_timedout = 0; | 115 ev->posted_timedout = 0; |
135 ev->posted_available = 0; | |
136 ev->posted_eof = 0; | 116 ev->posted_eof = 0; |
137 #if (HAVE_KQUEUE) | 117 #if (HAVE_KQUEUE) |
138 ev->posted_errno = 0; | 118 ev->posted_errno = 0; |
139 #endif | 119 #endif |
120 ev->posted_available = 0; | |
140 | 121 |
141 ngx_mutex_unlock(ngx_posted_events_mutex); | 122 ngx_mutex_unlock(ngx_posted_events_mutex); |
142 | 123 |
143 ev->event_handler(ev); | 124 ev->event_handler(ev); |
144 | 125 |