comparison src/event/modules/ngx_select_module.c @ 10:46833bd150cb NGINX_0_1_5

nginx 0.1.5 *) Bugfix: on Solaris and Linux there may be too many "recvmsg() returned not enough data" alerts. *) Bugfix: there were the "writev() failed (22: Invalid argument)" errors on Solaris in proxy mode without sendfile. On other platforms that do not support sendfile at all the process got caught in an endless loop. *) Bugfix: segmentation fault on Solaris in proxy mode and using sendfile. *) Bugfix: segmentation fault on Solaris. *) Bugfix: on-line upgrade did not work on Linux. *) Bugfix: the ngx_http_autoindex_module module did not escape the spaces, the quotes, and the percent signs in the directory listing. *) Change: the decrease of the copy operations. *) Feature: the userid_p3p directive.
author Igor Sysoev <http://sysoev.ru>
date Thu, 11 Nov 2004 00:00:00 +0300
parents f0b350454894
children 6f8b0dc0f8dd
comparison
equal deleted inserted replaced
9:77eee314ddbd 10:46833bd150cb
21 static fd_set master_read_fd_set; 21 static fd_set master_read_fd_set;
22 static fd_set master_write_fd_set; 22 static fd_set master_write_fd_set;
23 static fd_set work_read_fd_set; 23 static fd_set work_read_fd_set;
24 static fd_set work_write_fd_set; 24 static fd_set work_write_fd_set;
25 25
26 #if (WIN32) 26 #if (NGX_WIN32)
27 static int max_read; 27 static int max_read;
28 static int max_write; 28 static int max_write;
29 #else 29 #else
30 static int max_fd; 30 static int max_fd;
31 #endif 31 #endif
112 112
113 ngx_event_actions = ngx_select_module_ctx.actions; 113 ngx_event_actions = ngx_select_module_ctx.actions;
114 114
115 ngx_event_flags = NGX_USE_LEVEL_EVENT|NGX_USE_ONESHOT_EVENT; 115 ngx_event_flags = NGX_USE_LEVEL_EVENT|NGX_USE_ONESHOT_EVENT;
116 116
117 #if (WIN32) 117 #if (NGX_WIN32)
118 max_read = max_write = 0; 118 max_read = max_write = 0;
119 #else 119 #else
120 max_fd = -1; 120 max_fd = -1;
121 #endif 121 #endif
122 122
148 ngx_log_error(NGX_LOG_ALERT, ev->log, 0, 148 ngx_log_error(NGX_LOG_ALERT, ev->log, 0,
149 "select event fd:%d ev:%d is already set", c->fd, event); 149 "select event fd:%d ev:%d is already set", c->fd, event);
150 return NGX_OK; 150 return NGX_OK;
151 } 151 }
152 152
153 #if (WIN32) 153 #if (NGX_WIN32)
154 154
155 if ((event == NGX_READ_EVENT) && (max_read >= FD_SETSIZE) 155 if ((event == NGX_READ_EVENT) && (max_read >= FD_SETSIZE)
156 || (event == NGX_WRITE_EVENT) && (max_write >= FD_SETSIZE)) 156 || (event == NGX_WRITE_EVENT) && (max_write >= FD_SETSIZE))
157 { 157 {
158 ngx_log_error(NGX_LOG_ERR, ev->log, 0, 158 ngx_log_error(NGX_LOG_ERR, ev->log, 0,
209 } 209 }
210 210
211 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0, 211 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
212 "select del event fd:%d ev:%d", c->fd, event); 212 "select del event fd:%d ev:%d", c->fd, event);
213 213
214 #if (WIN32) 214 #if (NGX_WIN32)
215 215
216 if (event == NGX_READ_EVENT) { 216 if (event == NGX_READ_EVENT) {
217 FD_CLR(c->fd, &master_read_fd_set); 217 FD_CLR(c->fd, &master_read_fd_set);
218 max_read--; 218 max_read--;
219 219
278 278
279 ngx_old_elapsed_msec = ngx_elapsed_msec; 279 ngx_old_elapsed_msec = ngx_elapsed_msec;
280 280
281 expire = 1; 281 expire = 1;
282 282
283 #if !(WIN32) 283 #if !(NGX_WIN32)
284 284
285 if (ngx_accept_mutex) { 285 if (ngx_accept_mutex) {
286 if (ngx_accept_disabled > 0) { 286 if (ngx_accept_disabled > 0) {
287 ngx_accept_disabled--; 287 ngx_accept_disabled--;
288 288
322 c = ev->data; 322 c = ev->data;
323 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0, 323 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
324 "select event: fd:%d wr:%d", c->fd, ev->write); 324 "select event: fd:%d wr:%d", c->fd, ev->write);
325 } 325 }
326 326
327 #if !(WIN32) 327 #if !(NGX_WIN32)
328 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, 328 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
329 "max_fd: %d", max_fd); 329 "max_fd: %d", max_fd);
330 #endif 330 #endif
331 } 331 }
332 #endif 332 #endif
346 346
347 work_read_fd_set = master_read_fd_set; 347 work_read_fd_set = master_read_fd_set;
348 work_write_fd_set = master_write_fd_set; 348 work_write_fd_set = master_write_fd_set;
349 349
350 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, 350 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
351 "select read fd_set: %08X", *(int *) &work_read_fd_set); 351 "select read fd_set: %08Xd", *(int *) &work_read_fd_set);
352 352
353 #if (WIN32) 353 #if (NGX_WIN32)
354 ready = select(0, &work_read_fd_set, &work_write_fd_set, NULL, tp); 354 ready = select(0, &work_read_fd_set, &work_write_fd_set, NULL, tp);
355 #else 355 #else
356 ready = select(max_fd + 1, &work_read_fd_set, &work_write_fd_set, NULL, tp); 356 ready = select(max_fd + 1, &work_read_fd_set, &work_write_fd_set, NULL, tp);
357 #endif 357 #endif
358 358
431 431
432 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, 432 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
433 "select ready %d", ready); 433 "select ready %d", ready);
434 434
435 if (err) { 435 if (err) {
436 #if (WIN32) 436 #if (NGX_WIN32)
437 ngx_log_error(NGX_LOG_ALERT, cycle->log, err, "select() failed"); 437 ngx_log_error(NGX_LOG_ALERT, cycle->log, err, "select() failed");
438 #else 438 #else
439 ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT, 439 ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT,
440 cycle->log, err, "select() failed"); 440 cycle->log, err, "select() failed");
441 #endif 441 #endif
532 ev = accept_events; 532 ev = accept_events;
533 533
534 for ( ;; ) { 534 for ( ;; ) {
535 535
536 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, 536 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
537 "accept event " PTR_FMT, ev); 537 "accept event %p", ev);
538 538
539 if (ev == NULL) { 539 if (ev == NULL) {
540 break; 540 break;
541 } 541 }
542 542
595 return NGX_CONF_OK; 595 return NGX_CONF_OK;
596 } 596 }
597 597
598 /* disable warning: the default FD_SETSIZE is 1024U in FreeBSD 5.x */ 598 /* disable warning: the default FD_SETSIZE is 1024U in FreeBSD 5.x */
599 599
600 #if !(WIN32) 600 #if !(NGX_WIN32)
601 if ((unsigned) ecf->connections > FD_SETSIZE) { 601 if ((unsigned) ecf->connections > FD_SETSIZE) {
602 ngx_log_error(NGX_LOG_EMERG, cycle->log, 0, 602 ngx_log_error(NGX_LOG_EMERG, cycle->log, 0,
603 "the maximum number of files " 603 "the maximum number of files "
604 "supported by select() is " ngx_value(FD_SETSIZE)); 604 "supported by select() is " ngx_value(FD_SETSIZE));
605 return NGX_CONF_ERROR; 605 return NGX_CONF_ERROR;
606 } 606 }
607 #endif 607 #endif
608 608
609 #if (NGX_THREADS) 609 #if (NGX_THREADS) && !(NGX_WIN32)
610 ngx_log_error(NGX_LOG_EMERG, cycle->log, 0, 610 ngx_log_error(NGX_LOG_EMERG, cycle->log, 0,
611 "select() is not supported in the threaded mode"); 611 "select() is not supported in the threaded mode");
612 return NGX_CONF_ERROR; 612 return NGX_CONF_ERROR;
613 #else 613 #else
614 return NGX_CONF_OK; 614 return NGX_CONF_OK;