comparison src/event/modules/ngx_poll_module.c @ 37:9fe40e51d4a3

nginx-0.0.1-2002-12-23-21:22:18 import
author Igor Sysoev <igor@sysoev.ru>
date Mon, 23 Dec 2002 18:22:18 +0000
parents c14d7232b11f
children 2ffaa35fba42
comparison
equal deleted inserted replaced
36:c14d7232b11f 37:9fe40e51d4a3
1 1
2 #include <ngx_config.h> 2 #include <ngx_config.h>
3 #include <ngx_core.h> 3 #include <ngx_core.h>
4 #include <ngx_types.h> 4 #include <ngx_types.h>
5 #include <ngx_errno.h>
5 #include <ngx_log.h> 6 #include <ngx_log.h>
6 #include <ngx_time.h> 7 #include <ngx_time.h>
7 #include <ngx_connection.h> 8 #include <ngx_connection.h>
8 #include <ngx_event.h> 9 #include <ngx_event.h>
9 #include <ngx_poll_module.h> 10 #include <ngx_poll_module.h>
106 107
107 ngx_log_debug(c->log, "del event: %d, %d" _ c->fd _ event); 108 ngx_log_debug(c->log, "del event: %d, %d" _ c->fd _ event);
108 109
109 if (e == NULL || e->index == NGX_INVALID_INDEX) { 110 if (e == NULL || e->index == NGX_INVALID_INDEX) {
110 if (ev->index < --nevents) { 111 if (ev->index < --nevents) {
112 event_list[ev->index] = event_list[nevents];
111 event_index[ev->index] = event_index[nevents]; 113 event_index[ev->index] = event_index[nevents];
112 event_index[ev->index]->index = ev->index; 114 event_index[ev->index]->index = ev->index;
113 } 115 }
114 116
115 } else { 117 } else {
123 125
124 int ngx_poll_process_events(ngx_log_t *log) 126 int ngx_poll_process_events(ngx_log_t *log)
125 { 127 {
126 int i, ready, found; 128 int i, ready, found;
127 u_int timer, delta; 129 u_int timer, delta;
130 ngx_err_t err;
128 ngx_event_t *ev; 131 ngx_event_t *ev;
129 ngx_connection_t *c; 132 ngx_connection_t *c;
130 133
131 if (timer_queue.timer_next != &timer_queue) { 134 if (timer_queue.timer_next != &timer_queue) {
132 timer = timer_queue.timer_next->timer_delta; 135 timer = timer_queue.timer_next->timer_delta;
200 found = 1; 203 found = 1;
201 c->read->ready = 1; 204 c->read->ready = 1;
202 205
203 if (c->read->oneshot) { 206 if (c->read->oneshot) {
204 ngx_del_timer(c->read); 207 ngx_del_timer(c->read);
205 ngx_select_del_event(c->read, NGX_READ_EVENT, 0); 208 ngx_poll_del_event(c->read, NGX_READ_EVENT, 0);
206 } 209 }
207 210
208 if (c->read->event_handler(c->read) == NGX_ERROR) { 211 if (c->read->event_handler(c->read) == NGX_ERROR) {
209 c->read->close_handler(c->read); 212 c->read->close_handler(c->read);
210 } 213 }
214 found = 1; 217 found = 1;
215 c->write->ready = 1; 218 c->write->ready = 1;
216 219
217 if (c->write->oneshot) { 220 if (c->write->oneshot) {
218 ngx_del_timer(c->write); 221 ngx_del_timer(c->write);
219 ngx_select_del_event(c->write, NGX_WRITE_EVENT, 0); 222 ngx_poll_del_event(c->write, NGX_WRITE_EVENT, 0);
220 } 223 }
221 224
222 if (c->write->event_handler(c->write) == NGX_ERROR) { 225 if (c->write->event_handler(c->write) == NGX_ERROR) {
223 c->write->close_handler(c->write); 226 c->write->close_handler(c->write);
224 } 227 }
225 } 228 }
226 229
227 if (event_list[i].revents & (POLLERR|POLLHUP|POLLNVAL)) { 230 if (event_list[i].revents & (POLLERR|POLLHUP|POLLNVAL)) {
228 found = 1; 231 found = 1;
229 ngx_log_error(NGX_LOG_ERR, log, ngx_errno, 232
233 err = 0;
234 if (event_list[i].revents & POLLNVAL) {
235 err = EBADF;
236 }
237
238 ngx_log_error(NGX_LOG_ERR, log, err,
230 "poll() error on %d:%d", 239 "poll() error on %d:%d",
231 event_list[i].fd, event_list[i].revents); 240 event_list[i].fd, event_list[i].revents);
232 } 241 }
233 242
234 if (found) { 243 if (found) {