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