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++) {