Mercurial > hg > nginx
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 |