comparison src/os/unix/ngx_process_cycle.c @ 378:820f6378fc00 NGINX_0_7_1

nginx 0.7.1 *) Change: now locations are searched in a tree. *) Change: the "optimize_server_names" directive was canceled due to the "server_name_in_redirect" directive introduction. *) Change: some long deprecated directives are not supported anymore. *) Change: the "none" parameter in the "ssl_session_cache" directive; now this is default parameter. Thanks to Rob Mueller. *) Bugfix: worker processes might not catch reconfiguration and log rotation signals. *) Bugfix: nginx could not be built on latest Fedora 9 Linux. Thanks to Roxis.
author Igor Sysoev <http://sysoev.ru>
date Mon, 26 May 2008 00:00:00 +0400
parents babd3d9efb62
children 984bb0b1399b
comparison
equal deleted inserted replaced
377:5d98007adb5f 378:820f6378fc00
1052 1052
1053 c = ev->data; 1053 c = ev->data;
1054 1054
1055 ngx_log_debug0(NGX_LOG_DEBUG_CORE, ev->log, 0, "channel handler"); 1055 ngx_log_debug0(NGX_LOG_DEBUG_CORE, ev->log, 0, "channel handler");
1056 1056
1057 n = ngx_read_channel(c->fd, &ch, sizeof(ngx_channel_t), ev->log); 1057 for ( ;; ) {
1058 1058
1059 ngx_log_debug1(NGX_LOG_DEBUG_CORE, ev->log, 0, "channel: %i", n); 1059 n = ngx_read_channel(c->fd, &ch, sizeof(ngx_channel_t), ev->log);
1060 1060
1061 if (n == NGX_ERROR) { 1061 ngx_log_debug1(NGX_LOG_DEBUG_CORE, ev->log, 0, "channel: %i", n);
1062 1062
1063 if (ngx_event_flags & NGX_USE_EPOLL_EVENT) { 1063 if (n == NGX_ERROR) {
1064 ngx_del_conn(c, 0); 1064
1065 } 1065 if (ngx_event_flags & NGX_USE_EPOLL_EVENT) {
1066 1066 ngx_del_conn(c, 0);
1067 ngx_close_connection(c); 1067 }
1068 return; 1068
1069 } 1069 ngx_close_connection(c);
1070
1071 if (ngx_event_flags & NGX_USE_EVENTPORT_EVENT) {
1072 if (ngx_add_event(ev, NGX_READ_EVENT, 0) == NGX_ERROR) {
1073 return; 1070 return;
1074 } 1071 }
1075 } 1072
1076 1073 if (ngx_event_flags & NGX_USE_EVENTPORT_EVENT) {
1077 if (n == NGX_AGAIN) { 1074 if (ngx_add_event(ev, NGX_READ_EVENT, 0) == NGX_ERROR) {
1078 return; 1075 return;
1079 } 1076 }
1080 1077 }
1081 ngx_log_debug1(NGX_LOG_DEBUG_CORE, ev->log, 0, 1078
1082 "channel command: %d", ch.command); 1079 if (n == NGX_AGAIN) {
1083 1080 return;
1084 switch (ch.command) { 1081 }
1085 1082
1086 case NGX_CMD_QUIT: 1083 ngx_log_debug1(NGX_LOG_DEBUG_CORE, ev->log, 0,
1087 ngx_quit = 1; 1084 "channel command: %d", ch.command);
1088 break; 1085
1089 1086 switch (ch.command) {
1090 case NGX_CMD_TERMINATE: 1087
1091 ngx_terminate = 1; 1088 case NGX_CMD_QUIT:
1092 break; 1089 ngx_quit = 1;
1093 1090 break;
1094 case NGX_CMD_REOPEN: 1091
1095 ngx_reopen = 1; 1092 case NGX_CMD_TERMINATE:
1096 break; 1093 ngx_terminate = 1;
1097 1094 break;
1098 case NGX_CMD_OPEN_CHANNEL: 1095
1099 1096 case NGX_CMD_REOPEN:
1100 ngx_log_debug3(NGX_LOG_DEBUG_CORE, ev->log, 0, 1097 ngx_reopen = 1;
1101 "get channel s:%i pid:%P fd:%d", ch.slot, ch.pid, ch.fd); 1098 break;
1102 1099
1103 ngx_processes[ch.slot].pid = ch.pid; 1100 case NGX_CMD_OPEN_CHANNEL:
1104 ngx_processes[ch.slot].channel[0] = ch.fd; 1101
1105 break; 1102 ngx_log_debug3(NGX_LOG_DEBUG_CORE, ev->log, 0,
1106 1103 "get channel s:%i pid:%P fd:%d",
1107 case NGX_CMD_CLOSE_CHANNEL: 1104 ch.slot, ch.pid, ch.fd);
1108 1105
1109 ngx_log_debug4(NGX_LOG_DEBUG_CORE, ev->log, 0, 1106 ngx_processes[ch.slot].pid = ch.pid;
1110 "close channel s:%i pid:%P our:%P fd:%d", 1107 ngx_processes[ch.slot].channel[0] = ch.fd;
1111 ch.slot, ch.pid, ngx_processes[ch.slot].pid, 1108 break;
1112 ngx_processes[ch.slot].channel[0]); 1109
1113 1110 case NGX_CMD_CLOSE_CHANNEL:
1114 if (close(ngx_processes[ch.slot].channel[0]) == -1) { 1111
1115 ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_errno, 1112 ngx_log_debug4(NGX_LOG_DEBUG_CORE, ev->log, 0,
1116 "close() channel failed"); 1113 "close channel s:%i pid:%P our:%P fd:%d",
1117 } 1114 ch.slot, ch.pid, ngx_processes[ch.slot].pid,
1118 1115 ngx_processes[ch.slot].channel[0]);
1119 ngx_processes[ch.slot].channel[0] = -1; 1116
1120 break; 1117 if (close(ngx_processes[ch.slot].channel[0]) == -1) {
1118 ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_errno,
1119 "close() channel failed");
1120 }
1121
1122 ngx_processes[ch.slot].channel[0] = -1;
1123 break;
1124 }
1121 } 1125 }
1122 } 1126 }
1123 1127
1124 1128
1125 #if (NGX_THREADS) 1129 #if (NGX_THREADS)