comparison src/event/modules/ngx_devpoll_module.c @ 326:f70f2f565fe0 NGINX_0_5_33

nginx 0.5.33 *) Change: now by default the "echo" SSI command uses entity encoding. *) Feature: the "encoding" parameter in the "echo" SSI command. *) Change: mail proxy was split on three modules: pop3, imap and smtp. *) Feature: the --without-mail_pop3_module, --without-mail_imap_module, and --without-mail_smtp_module configuration parameters. *) Feature: the "smtp_greeting_delay" and "smtp_client_buffer" directives of the ngx_mail_smtp_module. *) Feature: the "server_name" and "valid_referers" directives support regular expressions. *) Feature: the "server_name", "map", and "valid_referers" directives support the "www.example.*" wildcards. *) Bugfix: sub_filter did not work with empty substitution. *) Bugfix: in sub_filter parsing. *) Bugfix: a worker process may got caught in an endless loop, if the memcached was used. *) Bugfix: nginx supported low case only "close" and "keep-alive" values in the "Connection" request header line; bug appeared in 0.5.32. *) Bugfix: nginx could not start on Solaris if the shared PCRE library located in non-standard place was used.
author Igor Sysoev <http://sysoev.ru>
date Wed, 07 Nov 2007 00:00:00 +0300
parents 7cf404023f50
children
comparison
equal deleted inserted replaced
325:5bb1b28ddeaa 326:f70f2f565fe0
25 25
26 #endif 26 #endif
27 27
28 28
29 typedef struct { 29 typedef struct {
30 u_int changes; 30 ngx_uint_t changes;
31 u_int events; 31 ngx_uint_t events;
32 } ngx_devpoll_conf_t; 32 } ngx_devpoll_conf_t;
33 33
34 34
35 static ngx_int_t ngx_devpoll_init(ngx_cycle_t *cycle, ngx_msec_t timer); 35 static ngx_int_t ngx_devpoll_init(ngx_cycle_t *cycle, ngx_msec_t timer);
36 static void ngx_devpoll_done(ngx_cycle_t *cycle); 36 static void ngx_devpoll_done(ngx_cycle_t *cycle);
37 static ngx_int_t ngx_devpoll_add_event(ngx_event_t *ev, int event, u_int flags); 37 static ngx_int_t ngx_devpoll_add_event(ngx_event_t *ev, ngx_int_t event,
38 static ngx_int_t ngx_devpoll_del_event(ngx_event_t *ev, int event, u_int flags); 38 ngx_uint_t flags);
39 static ngx_int_t ngx_devpoll_set_event(ngx_event_t *ev, int event, u_int flags); 39 static ngx_int_t ngx_devpoll_del_event(ngx_event_t *ev, ngx_int_t event,
40 ngx_uint_t flags);
41 static ngx_int_t ngx_devpoll_set_event(ngx_event_t *ev, ngx_int_t event,
42 ngx_uint_t flags);
40 static ngx_int_t ngx_devpoll_process_events(ngx_cycle_t *cycle, 43 static ngx_int_t ngx_devpoll_process_events(ngx_cycle_t *cycle,
41 ngx_msec_t timer, ngx_uint_t flags); 44 ngx_msec_t timer, ngx_uint_t flags);
42 45
43 static void *ngx_devpoll_create_conf(ngx_cycle_t *cycle); 46 static void *ngx_devpoll_create_conf(ngx_cycle_t *cycle);
44 static char *ngx_devpoll_init_conf(ngx_cycle_t *cycle, void *conf); 47 static char *ngx_devpoll_init_conf(ngx_cycle_t *cycle, void *conf);
45 48
46 static int dp = -1; 49 static int dp = -1;
47 static struct pollfd *change_list, *event_list; 50 static struct pollfd *change_list, *event_list;
48 static u_int nchanges, max_changes, nevents; 51 static ngx_uint_t nchanges, max_changes, nevents;
49 52
50 static ngx_event_t **change_index; 53 static ngx_event_t **change_index;
51 54
52 55
53 static ngx_str_t devpoll_name = ngx_string("/dev/poll"); 56 static ngx_str_t devpoll_name = ngx_string("/dev/poll");
207 nevents = 0; 210 nevents = 0;
208 } 211 }
209 212
210 213
211 static ngx_int_t 214 static ngx_int_t
212 ngx_devpoll_add_event(ngx_event_t *ev, int event, u_int flags) 215 ngx_devpoll_add_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags)
213 { 216 {
214 #if (NGX_DEBUG) 217 #if (NGX_DEBUG)
215 ngx_connection_t *c; 218 ngx_connection_t *c;
216 #endif 219 #endif
217 220
220 #endif 223 #endif
221 224
222 #if (NGX_DEBUG) 225 #if (NGX_DEBUG)
223 c = ev->data; 226 c = ev->data;
224 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0, 227 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
225 "devpoll add event: fd:%d ev:%04Xd", c->fd, event); 228 "devpoll add event: fd:%d ev:%04Xi", c->fd, event);
226 #endif 229 #endif
227 230
228 ev->active = 1; 231 ev->active = 1;
229 232
230 return ngx_devpoll_set_event(ev, event, 0); 233 return ngx_devpoll_set_event(ev, event, 0);
231 } 234 }
232 235
233 236
234 static ngx_int_t 237 static ngx_int_t
235 ngx_devpoll_del_event(ngx_event_t *ev, int event, u_int flags) 238 ngx_devpoll_del_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags)
236 { 239 {
237 ngx_event_t *e; 240 ngx_event_t *e;
238 ngx_connection_t *c; 241 ngx_connection_t *c;
239 242
240 c = ev->data; 243 c = ev->data;
242 #if (NGX_READ_EVENT != POLLIN) 245 #if (NGX_READ_EVENT != POLLIN)
243 event = (event == NGX_READ_EVENT) ? POLLIN : POLLOUT; 246 event = (event == NGX_READ_EVENT) ? POLLIN : POLLOUT;
244 #endif 247 #endif
245 248
246 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0, 249 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
247 "devpoll del event: fd:%d ev:%04Xd", c->fd, event); 250 "devpoll del event: fd:%d ev:%04Xi", c->fd, event);
248 251
249 if (ngx_devpoll_set_event(ev, POLLREMOVE, flags) == NGX_ERROR) { 252 if (ngx_devpoll_set_event(ev, POLLREMOVE, flags) == NGX_ERROR) {
250 return NGX_ERROR; 253 return NGX_ERROR;
251 } 254 }
252 255
280 return NGX_OK; 283 return NGX_OK;
281 } 284 }
282 285
283 286
284 static ngx_int_t 287 static ngx_int_t
285 ngx_devpoll_set_event(ngx_event_t *ev, int event, u_int flags) 288 ngx_devpoll_set_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags)
286 { 289 {
287 size_t n; 290 size_t n;
288 ngx_connection_t *c; 291 ngx_connection_t *c;
289 292
290 c = ev->data; 293 c = ev->data;
291 294
292 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, ev->log, 0, 295 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, ev->log, 0,
293 "devpoll fd:%d ev:%04Xd fl:%04Xd", c->fd, event, flags); 296 "devpoll fd:%d ev:%04Xi fl:%04Xi", c->fd, event, flags);
294 297
295 if (nchanges >= max_changes) { 298 if (nchanges >= max_changes) {
296 ngx_log_error(NGX_LOG_WARN, ev->log, 0, 299 ngx_log_error(NGX_LOG_WARN, ev->log, 0,
297 "/dev/pool change list is filled up"); 300 "/dev/pool change list is filled up");
298 301
305 308
306 nchanges = 0; 309 nchanges = 0;
307 } 310 }
308 311
309 change_list[nchanges].fd = c->fd; 312 change_list[nchanges].fd = c->fd;
310 change_list[nchanges].events = event; 313 change_list[nchanges].events = (short) event;
311 change_list[nchanges].revents = 0; 314 change_list[nchanges].revents = 0;
312 315
313 change_index[nchanges] = ev; 316 change_index[nchanges] = ev;
314 ev->index = nchanges; 317 ev->index = nchanges;
315 318
360 363
361 nchanges = 0; 364 nchanges = 0;
362 } 365 }
363 366
364 dvp.dp_fds = event_list; 367 dvp.dp_fds = event_list;
365 dvp.dp_nfds = nevents; 368 dvp.dp_nfds = (int) nevents;
366 dvp.dp_timeout = timer; 369 dvp.dp_timeout = timer;
367 events = ioctl(dp, DP_POLL, &dvp); 370 events = ioctl(dp, DP_POLL, &dvp);
368 371
369 if (events == -1) { 372 if (events == -1) {
370 err = ngx_errno; 373 err = ngx_errno;