comparison src/event/modules/ngx_poll_module.c @ 356:2e3cbc1bbe3c

nginx-0.0.7-2004-06-16-19:32:11 import
author Igor Sysoev <igor@sysoev.ru>
date Wed, 16 Jun 2004 15:32:11 +0000
parents e0f3f238db09
children 744ccb59062d
comparison
equal deleted inserted replaced
355:0fb6c53fb135 356:2e3cbc1bbe3c
7 #include <ngx_config.h> 7 #include <ngx_config.h>
8 #include <ngx_core.h> 8 #include <ngx_core.h>
9 #include <ngx_event.h> 9 #include <ngx_event.h>
10 10
11 11
12 static int ngx_poll_init(ngx_cycle_t *cycle); 12 static ngx_int_t ngx_poll_init(ngx_cycle_t *cycle);
13 static void ngx_poll_done(ngx_cycle_t *cycle); 13 static void ngx_poll_done(ngx_cycle_t *cycle);
14 static int ngx_poll_add_event(ngx_event_t *ev, int event, u_int flags); 14 static ngx_int_t ngx_poll_add_event(ngx_event_t *ev, int event, u_int flags);
15 static int ngx_poll_del_event(ngx_event_t *ev, int event, u_int flags); 15 static ngx_int_t ngx_poll_del_event(ngx_event_t *ev, int event, u_int flags);
16 int ngx_poll_process_events(ngx_cycle_t *cycle); 16 static ngx_int_t ngx_poll_process_events(ngx_cycle_t *cycle);
17 17
18 18
19 static struct pollfd *event_list; 19 static struct pollfd *event_list;
20 static int nevents; 20 static int nevents;
21 21
56 NULL /* init process */ 56 NULL /* init process */
57 }; 57 };
58 58
59 59
60 60
61 static int ngx_poll_init(ngx_cycle_t *cycle) 61 static ngx_int_t ngx_poll_init(ngx_cycle_t *cycle)
62 { 62 {
63 struct pollfd *list; 63 struct pollfd *list;
64 64
65 if (event_list == NULL) { 65 if (event_list == NULL) {
66 nevents = 0; 66 nevents = 0;
116 ready_index = NULL; 116 ready_index = NULL;
117 #endif 117 #endif
118 } 118 }
119 119
120 120
121 static int ngx_poll_add_event(ngx_event_t *ev, int event, u_int flags) 121 static ngx_int_t ngx_poll_add_event(ngx_event_t *ev, int event, u_int flags)
122 { 122 {
123 ngx_event_t *e; 123 ngx_event_t *e;
124 ngx_connection_t *c; 124 ngx_connection_t *c;
125 125
126 c = ev->data; 126 c = ev->data;
169 169
170 return NGX_OK; 170 return NGX_OK;
171 } 171 }
172 172
173 173
174 static int ngx_poll_del_event(ngx_event_t *ev, int event, u_int flags) 174 static ngx_int_t ngx_poll_del_event(ngx_event_t *ev, int event, u_int flags)
175 { 175 {
176 ngx_uint_t i; 176 ngx_uint_t i;
177 ngx_cycle_t **cycle; 177 ngx_cycle_t **cycle;
178 ngx_event_t *e; 178 ngx_event_t *e;
179 ngx_connection_t *c; 179 ngx_connection_t *c;
257 257
258 return NGX_OK; 258 return NGX_OK;
259 } 259 }
260 260
261 261
262 int ngx_poll_process_events(ngx_cycle_t *cycle) 262 static ngx_int_t ngx_poll_process_events(ngx_cycle_t *cycle)
263 { 263 {
264 int ready; 264 int ready;
265 ngx_int_t i, nready; 265 ngx_int_t i, nready;
266 ngx_uint_t n, found, lock, expire; 266 ngx_uint_t n, found, lock, expire;
267 ngx_msec_t timer; 267 ngx_msec_t timer;
270 ngx_event_t *ev; 270 ngx_event_t *ev;
271 ngx_epoch_msec_t delta; 271 ngx_epoch_msec_t delta;
272 ngx_connection_t *c; 272 ngx_connection_t *c;
273 struct timeval tv; 273 struct timeval tv;
274 274
275 if (ngx_event_flags & NGX_OVERFLOW_EVENT) { 275 for ( ;; ) {
276 timer = 0; 276 timer = ngx_event_find_timer();
277
278 if (timer != 0) {
279 break;
280 }
281
282 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
283 "poll expired timer");
284
285 ngx_event_expire_timers((ngx_msec_t)
286 (ngx_elapsed_msec - ngx_old_elapsed_msec));
287 }
288
289 /* NGX_TIMER_INFINITE == INFTIM */
290
291 if (timer == NGX_TIMER_INFINITE) {
277 expire = 0; 292 expire = 0;
278 293
279 } else { 294 } else {
280 for ( ;; ) { 295 expire = 1;
281 timer = ngx_event_find_timer();
282
283 if (timer != 0) {
284 break;
285 }
286
287 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
288 "poll expired timer");
289
290 ngx_event_expire_timers((ngx_msec_t)
291 (ngx_elapsed_msec - ngx_old_elapsed_msec));
292 }
293
294 /* NGX_TIMER_INFINITE == INFTIM */
295
296 if (timer == NGX_TIMER_INFINITE) {
297 expire = 0;
298
299 } else {
300 expire = 1;
301 }
302 } 296 }
303 297
304 ngx_old_elapsed_msec = ngx_elapsed_msec; 298 ngx_old_elapsed_msec = ngx_elapsed_msec;
305 299
306 #if (NGX_DEBUG0) 300 #if (NGX_DEBUG0)
368 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, 362 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
369 "poll() returned no events without timeout"); 363 "poll() returned no events without timeout");
370 ngx_accept_mutex_unlock(); 364 ngx_accept_mutex_unlock();
371 return NGX_ERROR; 365 return NGX_ERROR;
372 } 366 }
373 }
374
375 if ((ngx_event_flags & NGX_OVERFLOW_EVENT) && timer == 0 && ready == 0) {
376
377 /* the overflowed rt signals queue has been drained */
378
379 ngx_accept_mutex_unlock();
380 return NGX_OK;
381 } 367 }
382 368
383 if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) { 369 if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) {
384 ngx_accept_mutex_unlock(); 370 ngx_accept_mutex_unlock();
385 return NGX_ERROR; 371 return NGX_ERROR;