comparison src/event/modules/ngx_devpoll_module.c @ 452:23fb87bddda1 release-0.1.1

nginx-0.1.1-RELEASE import *) Feature: the gzip_types directive. *) Feature: the tcp_nodelay directive. *) Feature: the send_lowat directive is working not only on OSes that support kqueue NOTE_LOWAT, but also on OSes that support SO_SNDLOWAT. *) Feature: the setproctitle() emulation for Linux and Solaris. *) Bugfix: the "Location" header rewrite bug fixed while the proxying. *) Bugfix: the ngx_http_chunked_module module may get caught in an endless loop. *) Bugfix: the /dev/poll module bugs fixed. *) Bugfix: the responses were corrupted when the temporary files were used while the proxying. *) Bugfix: the unescaped requests were passed to the backend. *) Bugfix: while the build configuration on Linux 2.4 the --with-poll_module parameter was required.
author Igor Sysoev <igor@sysoev.ru>
date Mon, 11 Oct 2004 15:07:03 +0000
parents 42d11f017717
children a88a3e4e158f
comparison
equal deleted inserted replaced
451:f40362e47689 452:23fb87bddda1
200 #if (NGX_DEBUG) 200 #if (NGX_DEBUG)
201 ngx_connection_t *c; 201 ngx_connection_t *c;
202 #endif 202 #endif
203 203
204 #if (NGX_READ_EVENT != POLLIN) 204 #if (NGX_READ_EVENT != POLLIN)
205 if (event == NGX_READ_EVENT) { 205 event = (event == NGX_READ_EVENT) ? POLLIN : POLLOUT;
206 event = POLLOUT;
207 #if (NGX_WRITE_EVENT != POLLOUT)
208 } else {
209 event = POLLIN;
210 #endif
211 }
212 #endif 206 #endif
213 207
214 #if (NGX_DEBUG) 208 #if (NGX_DEBUG)
215 c = ev->data; 209 c = ev->data;
216 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0, 210 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
217 "devpoll add event: fd:%d ev:%04X", c->fd, event); 211 "devpoll add event: fd:%d ev:%04X", c->fd, event);
218 #endif 212 #endif
219 213
220 ev->active = 1; 214 ev->active = 1;
215
221 return ngx_devpoll_set_event(ev, event, 0); 216 return ngx_devpoll_set_event(ev, event, 0);
222 } 217 }
223 218
224 219
225 static int ngx_devpoll_del_event(ngx_event_t *ev, int event, u_int flags) 220 static int ngx_devpoll_del_event(ngx_event_t *ev, int event, u_int flags)
227 ngx_event_t *e; 222 ngx_event_t *e;
228 ngx_connection_t *c; 223 ngx_connection_t *c;
229 224
230 c = ev->data; 225 c = ev->data;
231 226
227 #if (NGX_READ_EVENT != POLLIN)
228 event = (event == NGX_READ_EVENT) ? POLLIN : POLLOUT;
229 #endif
230
232 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0, 231 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
233 "devpoll del event: fd:%d ev:%04X", c->fd, event); 232 "devpoll del event: fd:%d ev:%04X", c->fd, event);
234 233
235 if (ngx_devpoll_set_event(ev, POLLREMOVE, flags) == NGX_ERROR) { 234 if (ngx_devpoll_set_event(ev, POLLREMOVE, flags) == NGX_ERROR) {
236 return NGX_ERROR; 235 return NGX_ERROR;
240 239
241 if (flags & NGX_CLOSE_EVENT) { 240 if (flags & NGX_CLOSE_EVENT) {
242 return NGX_OK; 241 return NGX_OK;
243 } 242 }
244 243
245 /* we need to restore the second event if it exists */ 244 /* restore the paired event if it exists */
246 245
247 if (event == NGX_READ_EVENT) { 246 if (event == POLLIN) {
248 if (ev->accept) {
249 return NGX_OK;
250 }
251
252 e = c->write; 247 e = c->write;
253 event = POLLOUT; 248 event = POLLOUT;
254 249
255 } else { 250 } else {
256 e = c->read; 251 e = c->read;
257 event = POLLIN; 252 event = POLLIN;
258 } 253 }
259 254
260 if (e) { 255 if (e && e->active) {
261 return ngx_devpoll_set_event(e, event, 0); 256 return ngx_devpoll_set_event(e, event, 0);
262 } 257 }
263 258
264 return NGX_OK; 259 return NGX_OK;
265 } 260 }
271 ngx_connection_t *c; 266 ngx_connection_t *c;
272 267
273 c = ev->data; 268 c = ev->data;
274 269
275 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, ev->log, 0, 270 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, ev->log, 0,
276 "devpoll fd:%d ev:%d fl:%d", c->fd, event, flags); 271 "devpoll fd:%d ev:%04X fl:%04X", c->fd, event, flags);
277 272
278 if (nchanges >= max_changes) { 273 if (nchanges >= max_changes) {
279 ngx_log_error(NGX_LOG_WARN, ev->log, 0, 274 ngx_log_error(NGX_LOG_WARN, ev->log, 0,
280 "/dev/pool change list is filled up"); 275 "/dev/pool change list is filled up");
281 276