Mercurial > hg > nginx-vendor-0-7
comparison src/event/modules/ngx_devpoll_module.c @ 116:e38f51cd0905 NGINX_0_3_5
nginx 0.3.5
*) Bugfix: the segmentation fault may occurred if the IMAP/POP3 login
was changed by authorization server; bug appeared in 0.2.2.
*) Bugfix: the accept mutex did not work and all connections were
handled by one process; bug appeared in 0.3.3.
*) Bugfix: the timeout did not work if the "rtsig" method and the
"timer_resolution" directive were used.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Fri, 21 Oct 2005 00:00:00 +0400 |
parents | 408f195b3482 |
children | df17fbafec8f |
comparison
equal
deleted
inserted
replaced
115:45a230988aa5 | 116:e38f51cd0905 |
---|---|
330 int events, revents; | 330 int events, revents; |
331 size_t n; | 331 size_t n; |
332 ngx_err_t err; | 332 ngx_err_t err; |
333 ngx_int_t i; | 333 ngx_int_t i; |
334 ngx_uint_t level; | 334 ngx_uint_t level; |
335 ngx_msec_t delta; | |
336 ngx_event_t *rev, *wev, **queue; | 335 ngx_event_t *rev, *wev, **queue; |
337 ngx_connection_t *c; | 336 ngx_connection_t *c; |
338 struct dvpoll dvp; | 337 struct dvpoll dvp; |
339 | 338 |
340 /* NGX_TIMER_INFINITE == INFTIM */ | 339 /* NGX_TIMER_INFINITE == INFTIM */ |
347 if (write(dp, change_list, n) != (ssize_t) n) { | 346 if (write(dp, change_list, n) != (ssize_t) n) { |
348 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, | 347 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, |
349 "write(/dev/poll) failed"); | 348 "write(/dev/poll) failed"); |
350 return NGX_ERROR; | 349 return NGX_ERROR; |
351 } | 350 } |
351 | |
352 nchanges = 0; | |
352 } | 353 } |
353 | 354 |
354 dvp.dp_fds = event_list; | 355 dvp.dp_fds = event_list; |
355 dvp.dp_nfds = nevents; | 356 dvp.dp_nfds = nevents; |
356 dvp.dp_timeout = timer; | 357 dvp.dp_timeout = timer; |
360 err = ngx_errno; | 361 err = ngx_errno; |
361 } else { | 362 } else { |
362 err = 0; | 363 err = 0; |
363 } | 364 } |
364 | 365 |
365 nchanges = 0; | |
366 | |
367 delta = ngx_current_msec; | |
368 | |
369 if (flags & NGX_UPDATE_TIME) { | 366 if (flags & NGX_UPDATE_TIME) { |
370 ngx_time_update(0, 0); | 367 ngx_time_update(0, 0); |
371 } | 368 } |
372 | 369 |
373 if (err) { | 370 if (err) { |
386 | 383 |
387 ngx_log_error(level, cycle->log, err, "ioctl(DP_POLL) failed"); | 384 ngx_log_error(level, cycle->log, err, "ioctl(DP_POLL) failed"); |
388 return NGX_ERROR; | 385 return NGX_ERROR; |
389 } | 386 } |
390 | 387 |
391 if (timer != NGX_TIMER_INFINITE) { | |
392 delta = ngx_current_msec - delta; | |
393 | |
394 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | |
395 "devpoll timer: %M, delta: %M", timer, delta); | |
396 } else { | |
397 if (events == 0) { | |
398 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, | |
399 "ioctl(DP_POLL) returned no events without timeout"); | |
400 return NGX_ERROR; | |
401 } | |
402 } | |
403 | |
404 if (events == 0) { | 388 if (events == 0) { |
405 return NGX_OK; | 389 if (timer != NGX_TIMER_INFINITE) { |
390 return NGX_OK; | |
391 } | |
392 | |
393 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, | |
394 "ioctl(DP_POLL) returned no events without timeout"); | |
395 return NGX_ERROR; | |
406 } | 396 } |
407 | 397 |
408 ngx_mutex_lock(ngx_posted_events_mutex); | 398 ngx_mutex_lock(ngx_posted_events_mutex); |
409 | 399 |
410 for (i = 0; i < events; i++) { | 400 for (i = 0; i < events; i++) { |