Mercurial > hg > nginx
comparison src/event/modules/ngx_devpoll_module.c @ 1619:e2ab812358bd stable-0.5
r1355, r1471, r1600 merge:
make 64-bit ngx_int_t on 64-bit platforms
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Wed, 07 Nov 2007 13:54:40 +0000 |
parents | 43ea45d73093 |
children |
comparison
equal
deleted
inserted
replaced
1618:fbf94b8341bf | 1619:e2ab812358bd |
---|---|
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; |