comparison src/event/ngx_event.h @ 189:c966c09be66b

nginx-0.0.1-2003-11-18-19:49:00 import
author Igor Sysoev <igor@sysoev.ru>
date Tue, 18 Nov 2003 16:49:00 +0000
parents c1f3a3c7c5db
children 2357fa41738a
comparison
equal deleted inserted replaced
188:0061d1f0908d 189:c966c09be66b
43 ngx_log_t *log; 43 ngx_log_t *log;
44 44
45 /* 45 /*
46 * kqueue only: 46 * kqueue only:
47 * accept: number of sockets that wait to be accepted 47 * accept: number of sockets that wait to be accepted
48 * read: bytes to read 48 * read: bytes to read when event is ready
49 * write: available space in buffer 49 * or lowat when event is set with NGX_LOWAT_EVENT flag
50 * write: available space in buffer when event is ready
51 * or lowat when event is set with NGX_LOWAT_EVENT flag
50 * 52 *
51 * otherwise: 53 * otherwise:
52 * accept: 1 if accept many, 0 otherwise 54 * accept: 1 if accept many, 0 otherwise
53 */ 55 */
56
57 #if (HAVE_KQUEUE)
54 int available; 58 int available;
59 #else
60 unsigned available:1;
61 #endif
55 62
56 unsigned oneshot:1; 63 unsigned oneshot:1;
57 64
58 unsigned write:1; 65 unsigned write:1;
59 66
100 #endif 107 #endif
101 108
102 #if (HAVE_KQUEUE) 109 #if (HAVE_KQUEUE)
103 /* the pending errno reported by kqueue */ 110 /* the pending errno reported by kqueue */
104 int kq_errno; 111 int kq_errno;
105 #endif
106
107 #if (HAVE_LOWAT_EVENT) /* kqueue's NOTE_LOWAT */
108 int lowat;
109 #endif 112 #endif
110 113
111 114
112 #if (HAVE_AIO) 115 #if (HAVE_AIO)
113 116
222 * kqueue: kqueue deletes event filters for file that closed 225 * kqueue: kqueue deletes event filters for file that closed
223 * so we need only to delete filters in user-level batch array 226 * so we need only to delete filters in user-level batch array
224 * /dev/poll: we need to flush POLLREMOVE event before closing file 227 * /dev/poll: we need to flush POLLREMOVE event before closing file
225 */ 228 */
226 229
227 #define NGX_CLOSE_EVENT 1 230 #define NGX_CLOSE_EVENT 1
231
232
233 /* this flag has meaning only for kqueue */
234 #define NGX_LOWAT_EVENT 0
228 235
229 236
230 #if (HAVE_KQUEUE) 237 #if (HAVE_KQUEUE)
231 238
232 #define NGX_READ_EVENT EVFILT_READ 239 #define NGX_READ_EVENT EVFILT_READ
233 #define NGX_WRITE_EVENT EVFILT_WRITE 240 #define NGX_WRITE_EVENT EVFILT_WRITE
234 241
235 /* 242 /*
236 * NGX_CLOSE_EVENT is the module flag and it would not go into a kernel 243 * NGX_CLOSE_EVENT and NGX_LOWAT_EVENT are the module flags and they would
237 * so we need to choose the value that would not interfere with any existent 244 * not go into a kernel so we need to choose the value that would not interfere
238 * and future flags. kqueue has such values - EV_FLAG1, EV_EOF and EV_ERROR. 245 * with any existent and future kqueue flags. kqueue has such values -
239 * They are reserved and cleared on a kernel entrance. 246 * EV_FLAG1, EV_EOF and EV_ERROR. They are reserved and cleared on a kernel
247 * entrance.
240 */ 248 */
241 #undef NGX_CLOSE_EVENT 249 #undef NGX_CLOSE_EVENT
242 #define NGX_CLOSE_EVENT EV_FLAG1 250 #define NGX_CLOSE_EVENT EV_EOF
251
252 #undef NGX_LOWAT_EVENT
253 #define NGX_LOWAT_EVENT EV_FLAG1
243 254
244 #define NGX_LEVEL_EVENT 0 255 #define NGX_LEVEL_EVENT 0
245 #define NGX_ONESHOT_EVENT EV_ONESHOT 256 #define NGX_ONESHOT_EVENT EV_ONESHOT
246 #define NGX_CLEAR_EVENT EV_CLEAR 257 #define NGX_CLEAR_EVENT EV_CLEAR
247 258
349 #include <ngx_iocp_module.h> 360 #include <ngx_iocp_module.h>
350 #endif 361 #endif
351 362
352 363
353 364
354 ngx_inline static int ngx_handle_read_event(ngx_event_t *rev, int close) 365 ngx_inline static int ngx_handle_read_event(ngx_event_t *rev, int flags)
355 { 366 {
356 if (ngx_event_flags & NGX_USE_CLEAR_EVENT) { 367 if (ngx_event_flags & NGX_USE_CLEAR_EVENT) {
357 368
358 /* kqueue */ 369 /* kqueue */
359 370
378 } 389 }
379 390
380 return NGX_OK; 391 return NGX_OK;
381 } 392 }
382 393
383 if (rev->active && (rev->ready || close)) { 394 if (rev->active && (rev->ready || (flags & NGX_CLOSE_EVENT))) {
384 if (ngx_del_event(rev, NGX_READ_EVENT, close ? NGX_CLOSE_EVENT : 0) 395 if (ngx_del_event(rev, NGX_READ_EVENT, flags) == NGX_ERROR) {
385 == NGX_ERROR)
386 {
387 return NGX_ERROR; 396 return NGX_ERROR;
388 } 397 }
389 398
390 return NGX_OK; 399 return NGX_OK;
391 } 400 }
421 430
422 return NGX_OK; 431 return NGX_OK;
423 } 432 }
424 433
425 434
426 ngx_inline static int ngx_handle_write_event(ngx_event_t *wev, int lowat) 435 ngx_inline static int ngx_handle_write_event(ngx_event_t *wev, int flags)
427 { 436 {
428 if (ngx_event_flags & NGX_USE_CLEAR_EVENT) { 437 if (ngx_event_flags & NGX_USE_CLEAR_EVENT) {
429 438
430 /* kqueue */ 439 /* kqueue */
431 440
432 #if (HAVE_LOWAT_EVENT) /* kqueue's NOTE_LOWAT */
433
434 if (ngx_event_flags & NGX_HAVE_LOWAT_EVENT) {
435 wev->lowat = lowat;
436 }
437
438 #endif
439 if (!wev->active && !wev->ready) { 441 if (!wev->active && !wev->ready) {
440 if (ngx_add_event(wev, NGX_WRITE_EVENT, NGX_CLEAR_EVENT) 442 if (ngx_add_event(wev, NGX_WRITE_EVENT, NGX_CLEAR_EVENT|flags)
441 == NGX_ERROR) { 443 == NGX_ERROR) {
442 return NGX_ERROR; 444 return NGX_ERROR;
443 } 445 }
444 } 446 }
445 447