Mercurial > hg > nginx
comparison src/event/ngx_event_posted.c @ 375:744ccb59062d
nginx-0.0.7-2004-07-02-19:54:34 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Fri, 02 Jul 2004 15:54:34 +0000 |
parents | 213f17e9f776 |
children | d0451e402e27 |
comparison
equal
deleted
inserted
replaced
374:213f17e9f776 | 375:744ccb59062d |
---|---|
25 | 25 |
26 if (ev == NULL) { | 26 if (ev == NULL) { |
27 return; | 27 return; |
28 } | 28 } |
29 | 29 |
30 ngx_posted_events = ev->next; | 30 ngx_delete_posted_event(ev); |
31 | |
32 #if 0 | |
33 /* do not check instance ??? */ | |
31 | 34 |
32 if (ev->accept) { | 35 if (ev->accept) { |
33 continue; | 36 continue; |
34 } | 37 } |
38 #endif | |
35 | 39 |
36 if ((!ev->posted && !ev->active) | 40 if (ev->closed |
37 || (ev->use_instance && ev->instance != ev->returned_instance)) | 41 || (ev->use_instance && ev->instance != ev->returned_instance)) |
38 { | 42 { |
39 /* | 43 /* |
40 * the stale event from a file descriptor | 44 * the stale event from a file descriptor |
41 * that was just closed in this iteration | 45 * that was just closed in this iteration |
44 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | 48 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
45 "stale posted event " PTR_FMT, ev); | 49 "stale posted event " PTR_FMT, ev); |
46 continue; | 50 continue; |
47 } | 51 } |
48 | 52 |
49 if (ev->posted) { | |
50 ev->posted = 0; | |
51 } | |
52 | |
53 ev->event_handler(ev); | 53 ev->event_handler(ev); |
54 } | 54 } |
55 } | 55 } |
56 | 56 |
57 | 57 |
58 #if (NGX_THREADS) | 58 #if (NGX_THREADS) |
59 | 59 |
60 ngx_int_t ngx_event_thread_process_posted(ngx_cycle_t *cycle) | 60 ngx_int_t ngx_event_thread_process_posted(ngx_cycle_t *cycle) |
61 { | 61 { |
62 ngx_event_t *ev, **ep; | 62 ngx_event_t *ev; |
63 | 63 |
64 for ( ;; ) { | 64 for ( ;; ) { |
65 | 65 |
66 ev = (ngx_event_t *) ngx_posted_events; | 66 ev = (ngx_event_t *) ngx_posted_events; |
67 ep = (ngx_event_t **) &ngx_posted_events; | |
68 | 67 |
69 for ( ;; ) { | 68 for ( ;; ) { |
70 | 69 |
71 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | 70 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
72 "posted event " PTR_FMT, ev); | 71 "posted event " PTR_FMT, ev); |
74 if (ev == NULL) { | 73 if (ev == NULL) { |
75 ngx_mutex_unlock(ngx_posted_events_mutex); | 74 ngx_mutex_unlock(ngx_posted_events_mutex); |
76 return NGX_OK; | 75 return NGX_OK; |
77 } | 76 } |
78 | 77 |
79 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | |
80 "posted event lock:%d " PTR_FMT, | |
81 *(ev->lock), ev->lock); | |
82 | |
83 if (ngx_trylock(ev->lock) == 0) { | 78 if (ngx_trylock(ev->lock) == 0) { |
84 | 79 |
85 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | 80 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
86 "posted event " PTR_FMT " is busy", ev); | 81 "posted event " PTR_FMT " is busy", ev); |
87 | 82 |
88 ep = &ev->next; | |
89 ev = ev->next; | 83 ev = ev->next; |
90 continue; | 84 continue; |
91 } | 85 } |
92 | 86 |
93 *ep = ev->next; | 87 ngx_delete_posted_event(ev); |
94 | 88 |
95 if ((!ev->posted && !ev->active) | 89 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
90 "event instance: c:%d i:%d r:%d", | |
91 ev->closed, ev->instance, ev->returned_instance); | |
92 | |
93 if (ev->closed | |
96 || (ev->use_instance && ev->instance != ev->returned_instance)) | 94 || (ev->use_instance && ev->instance != ev->returned_instance)) |
97 { | 95 { |
98 /* | 96 /* |
99 * The stale event from a file descriptor that was just | 97 * The stale event from a file descriptor that was just |
100 * closed in this iteration. We use ngx_cycle->log | 98 * closed in this iteration. We use ngx_cycle->log |
101 * because ev->log may be already destoyed. | 99 * because ev->log may be already destoyed. |
102 */ | 100 */ |
103 | 101 |
104 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, ngx_cycle->log, 0, | 102 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, ngx_cycle->log, 0, |
105 "kevent: stale event " PTR_FMT, ev); | 103 "stale posted event " PTR_FMT, ev); |
106 | 104 |
107 ngx_unlock(ev->lock); | 105 ngx_unlock(ev->lock); |
108 | 106 |
109 ev = ev->next; | 107 ev = ev->next; |
110 | 108 |
111 continue; | 109 continue; |
112 } | 110 } |
113 | 111 |
114 ev->locked = 1; | 112 ev->locked = 1; |
115 | 113 |
116 if (ev->posted) { | 114 ev->ready |= ev->posted_ready; |
117 ev->ready = ev->posted_ready; | 115 ev->timedout |= ev->posted_timedout; |
118 ev->timedout = ev->posted_timedout; | 116 ev->available |= ev->posted_available; |
119 ev->available = ev->posted_available; | 117 ev->pending_eof |= ev->posted_eof; |
120 ev->kq_eof = ev->posted_eof; | |
121 #if (HAVE_KQUEUE) | 118 #if (HAVE_KQUEUE) |
122 ev->kq_errno = ev->posted_errno; | 119 ev->kq_errno |= ev->posted_errno; |
123 #endif | 120 #endif |
124 ev->posted = 0; | 121 |
125 } | 122 ev->posted_ready = 0; |
123 ev->posted_timedout = 0; | |
124 ev->posted_available = 0; | |
125 ev->posted_eof = 0; | |
126 #if (HAVE_KQUEUE) | |
127 ev->posted_errno = 0; | |
128 #endif | |
126 | 129 |
127 ngx_mutex_unlock(ngx_posted_events_mutex); | 130 ngx_mutex_unlock(ngx_posted_events_mutex); |
128 | 131 |
129 ev->event_handler(ev); | 132 ev->event_handler(ev); |
130 | 133 |