Mercurial > hg > nginx-quic
comparison src/event/modules/ngx_poll_module.c @ 250:1903c6821958
nginx-0.0.2-2004-02-03-23:27:11 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 03 Feb 2004 20:27:11 +0000 |
parents | e885208c518b |
children | c31c40540318 |
comparison
equal
deleted
inserted
replaced
249:2a0540287298 | 250:1903c6821958 |
---|---|
128 ngx_event_t *e; | 128 ngx_event_t *e; |
129 ngx_connection_t *c; | 129 ngx_connection_t *c; |
130 | 130 |
131 c = ev->data; | 131 c = ev->data; |
132 | 132 |
133 if (ev->index != NGX_INVALID_INDEX) { | |
134 ngx_log_error(NGX_LOG_ALERT, ev->log, 0, | |
135 "poll event fd:%d ev:%d is already set", c->fd, event); | |
136 return NGX_OK; | |
137 } | |
138 | |
133 ev->active = 1; | 139 ev->active = 1; |
134 ev->oneshot = (flags & NGX_ONESHOT_EVENT) ? 1 : 0; | 140 ev->oneshot = (flags & NGX_ONESHOT_EVENT) ? 1 : 0; |
135 | 141 |
136 if (event == NGX_READ_EVENT) { | 142 if (event == NGX_READ_EVENT) { |
137 e = c->write; | 143 e = c->write; |
157 event_index[nevents] = ev; | 163 event_index[nevents] = ev; |
158 ev->index = nevents; | 164 ev->index = nevents; |
159 nevents++; | 165 nevents++; |
160 | 166 |
161 } else { | 167 } else { |
168 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, ev->log, 0, | |
169 "poll index: %d", e->index); | |
170 | |
162 event_list[e->index].events |= event; | 171 event_list[e->index].events |= event; |
163 ev->index = e->index; | 172 ev->index = e->index; |
164 } | 173 } |
165 | 174 |
166 return NGX_OK; | 175 return NGX_OK; |
193 | 202 |
194 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0, | 203 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0, |
195 "poll del event: fd:%d ev:%d", c->fd, event); | 204 "poll del event: fd:%d ev:%d", c->fd, event); |
196 | 205 |
197 if (e == NULL || e->index == NGX_INVALID_INDEX) { | 206 if (e == NULL || e->index == NGX_INVALID_INDEX) { |
198 if (ev->index < (u_int) --nevents) { | 207 nevents--; |
208 | |
209 if (ev->index < (u_int) nevents) { | |
199 event_list[ev->index] = event_list[nevents]; | 210 event_list[ev->index] = event_list[nevents]; |
200 event_index[ev->index] = event_index[nevents]; | 211 event_index[ev->index] = event_index[nevents]; |
201 event_index[ev->index]->index = ev->index; | 212 event_index[ev->index]->index = ev->index; |
202 } | 213 } |
203 | 214 |
204 } else { | 215 } else { |
216 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, ev->log, 0, | |
217 "poll index: %d", e->index); | |
218 | |
205 event_list[e->index].events &= ~event; | 219 event_list[e->index].events &= ~event; |
206 } | 220 } |
207 | 221 |
208 ev->active = 0; | 222 ev->active = 0; |
209 ev->index = NGX_INVALID_INDEX; | 223 ev->index = NGX_INVALID_INDEX; |
230 timer = (ngx_msec_t) INFTIM; | 244 timer = (ngx_msec_t) INFTIM; |
231 } | 245 } |
232 | 246 |
233 #if (NGX_DEBUG) | 247 #if (NGX_DEBUG) |
234 for (i = 0; i < nevents; i++) { | 248 for (i = 0; i < nevents; i++) { |
235 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0, "poll: fd:%d ev:%04X", | 249 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, log, 0, "poll: %d: fd:%d ev:%04X", |
236 event_list[i].fd, event_list[i].events); | 250 i, event_list[i].fd, event_list[i].events); |
237 } | 251 } |
238 | 252 |
239 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, "poll timer: %d", timer); | 253 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, "poll timer: %d", timer); |
240 #endif | 254 #endif |
241 | 255 |
276 | 290 |
277 nready = 0; | 291 nready = 0; |
278 | 292 |
279 for (i = 0; i < nevents && ready; i++) { | 293 for (i = 0; i < nevents && ready; i++) { |
280 | 294 |
281 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, log, 0, | 295 ngx_log_debug4(NGX_LOG_DEBUG_EVENT, log, 0, |
282 "poll: fd:%d ev:%04X rev:%04X", | 296 "poll: %d: fd:%d ev:%04X rev:%04X", |
283 event_list[i].fd, | 297 i, event_list[i].fd, |
284 event_list[i].events, event_list[i].revents); | 298 event_list[i].events, event_list[i].revents); |
285 | 299 |
286 if (event_list[i].revents & (POLLERR|POLLHUP|POLLNVAL)) { | 300 if (event_list[i].revents & (POLLERR|POLLHUP|POLLNVAL)) { |
287 ngx_log_error(NGX_LOG_ALERT, log, 0, | 301 ngx_log_error(NGX_LOG_ALERT, log, 0, |
288 "poll() error fd:%d ev:%04X rev:%04X", | 302 "poll() error fd:%d ev:%04X rev:%04X", |
313 } | 327 } |
314 } | 328 } |
315 | 329 |
316 if (c->fd == -1) { | 330 if (c->fd == -1) { |
317 ngx_log_error(NGX_LOG_ALERT, log, 0, "unknown cycle"); | 331 ngx_log_error(NGX_LOG_ALERT, log, 0, "unknown cycle"); |
332 | |
333 /* | |
334 * it is certainly our fault and it should be investigated, | |
335 * in the meantime we disable this event to avoid a CPU spinning | |
336 */ | |
337 | |
338 if (i == nevents - 1) { | |
339 nevents--; | |
340 } else { | |
341 event_list[i].fd = -1; | |
342 } | |
343 | |
318 continue; | 344 continue; |
319 } | 345 } |
320 | 346 |
321 found = 0; | 347 found = 0; |
322 | 348 |