comparison src/event/ngx_event.h @ 164:84036764e215

nginx-0.0.1-2003-10-29-11:30:44 import
author Igor Sysoev <igor@sysoev.ru>
date Wed, 29 Oct 2003 08:30:44 +0000
parents fb61ba77beba
children 389d7ee9fa60
comparison
equal deleted inserted replaced
163:fb61ba77beba 164:84036764e215
58 58
59 /* used to detect the stale events in kqueue, rt signals and epoll */ 59 /* used to detect the stale events in kqueue, rt signals and epoll */
60 unsigned instance:1; 60 unsigned instance:1;
61 61
62 /* 62 /*
63 * event was passed or would be passed to a kernel; 63 * the event was passed or would be passed to a kernel;
64 * the posted aio operation. 64 * aio mode: 1 - the posted aio operation,
65 * 0 - the complete aio operation or no aio operation.
65 */ 66 */
66 unsigned active:1; 67 unsigned active:1;
67 68
68 /* ready event; the complete aio operation */ 69 /*
70 * the ready event;
71 * in aio mode "ready" is always set - it makes things simple
72 * to learn whether the aio operation complete use aio_complete flag
73 */
69 unsigned ready:1; 74 unsigned ready:1;
75 unsigned aio_complete:1;
70 76
71 unsigned eof:1; 77 unsigned eof:1;
72 unsigned error:1; 78 unsigned error:1;
73 79
74 unsigned timedout:1; 80 unsigned timedout:1;
336 #include <ngx_iocp_module.h> 342 #include <ngx_iocp_module.h>
337 #endif 343 #endif
338 344
339 345
340 346
341 ngx_inline static int ngx_handle_read_event(ngx_event_t *rev) 347 ngx_inline static int ngx_handle_read_event(ngx_event_t *rev, int close)
342 { 348 {
343 if (ngx_event_flags & (NGX_USE_AIO_EVENT|NGX_USE_EDGE_EVENT)) {
344
345 /* aio, iocp, epoll */
346
347 return NGX_OK;
348 }
349
350 if (ngx_event_flags & NGX_USE_CLEAR_EVENT) { 349 if (ngx_event_flags & NGX_USE_CLEAR_EVENT) {
351 350
352 /* kqueue */ 351 /* kqueue */
353 352
354 if (!rev->active && !rev->ready) { 353 if (!rev->active && !rev->ready) {
357 return NGX_ERROR; 356 return NGX_ERROR;
358 } 357 }
359 } 358 }
360 359
361 return NGX_OK; 360 return NGX_OK;
361
362 } else if (ngx_event_flags & NGX_USE_LEVEL_EVENT) {
363
364 /* select, poll, /dev/poll */
365
366 if (!rev->active && !rev->ready) {
367 if (ngx_add_event(rev, NGX_READ_EVENT, NGX_LEVEL_EVENT)
368 == NGX_ERROR) {
369 return NGX_ERROR;
370 }
371
372 return NGX_OK;
373 }
374
375 if (rev->active && (rev->ready || close)) {
376 if (ngx_del_event(rev, NGX_READ_EVENT, close ? NGX_CLOSE_EVENT : 0)
377 == NGX_ERROR) {
378 return NGX_ERROR;
379 }
380
381 return NGX_OK;
382 }
362 } 383 }
363 384
364 /* select, poll, /dev/poll */ 385 /* aio, iocp, epoll, rt signals */
365
366 if (!rev->active && !rev->ready) {
367 if (ngx_add_event(rev, NGX_READ_EVENT, NGX_LEVEL_EVENT) == NGX_ERROR) {
368 return NGX_ERROR;
369 }
370
371 return NGX_OK;
372 }
373
374 if (rev->active && (rev->ready || rev->eof)) {
375 if (ngx_del_event(rev, NGX_READ_EVENT, rev->eof ? NGX_CLOSE_EVENT : 0)
376 == NGX_ERROR) {
377 return NGX_ERROR;
378 }
379
380 return NGX_OK;
381 }
382 386
383 return NGX_OK; 387 return NGX_OK;
384 } 388 }
385 389
386 390
409 } 413 }
410 414
411 415
412 ngx_inline static int ngx_handle_write_event(ngx_event_t *wev, int lowat) 416 ngx_inline static int ngx_handle_write_event(ngx_event_t *wev, int lowat)
413 { 417 {
414 if (ngx_event_flags & (NGX_USE_AIO_EVENT|NGX_USE_EDGE_EVENT)) {
415
416 /* aio, iocp, epoll */
417
418 return NGX_OK;
419 }
420
421 if (ngx_event_flags & NGX_USE_CLEAR_EVENT) { 418 if (ngx_event_flags & NGX_USE_CLEAR_EVENT) {
422 419
423 /* kqueue */ 420 /* kqueue */
424 421
425 #if (HAVE_LOWAT_EVENT) /* kqueue's NOTE_LOWAT */ 422 #if (HAVE_LOWAT_EVENT) /* kqueue's NOTE_LOWAT */
435 return NGX_ERROR; 432 return NGX_ERROR;
436 } 433 }
437 } 434 }
438 435
439 return NGX_OK; 436 return NGX_OK;
437
438 } else if (ngx_event_flags & NGX_USE_LEVEL_EVENT) {
439
440 /* select, poll, /dev/poll */
441
442 if (!wev->active && !wev->ready) {
443 if (ngx_add_event(wev, NGX_WRITE_EVENT, NGX_LEVEL_EVENT)
444 == NGX_ERROR) {
445 return NGX_ERROR;
446 }
447
448 return NGX_OK;
449 }
450
451 if (wev->active && wev->ready) {
452 if (ngx_del_event(wev, NGX_WRITE_EVENT, 0) == NGX_ERROR) {
453 return NGX_ERROR;
454 }
455
456 return NGX_OK;
457 }
440 } 458 }
441 459
442 /* select, poll, /dev/poll */ 460 /* aio, iocp, epoll, rt signals */
443
444 if (!wev->active && !wev->ready) {
445 if (ngx_add_event(wev, NGX_WRITE_EVENT, NGX_LEVEL_EVENT) == NGX_ERROR) {
446 return NGX_ERROR;
447 }
448
449 return NGX_OK;
450 }
451
452 if (wev->active && wev->ready) {
453 if (ngx_del_event(wev, NGX_WRITE_EVENT, 0) == NGX_ERROR) {
454 return NGX_ERROR;
455 }
456
457 return NGX_OK;
458 }
459 461
460 return NGX_OK; 462 return NGX_OK;
461 } 463 }
462 464
463 465