MCPcopy Create free account
hub / github.com/acl-dev/acl / event_process

Function event_process

lib_fiber/c.old/src/event.c:443–579  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

441}
442
443int event_process(EVENT *ev, int timeout)
444{
445 int processed = 0, numevents, j;
446 int mask, fd, rfired;
447 FILE_EVENT *fe;
448#ifdef DEL_DELAY
449 int ndefer;
450#endif
451
452 if (ev->timeout < 0) {
453 if (timeout < 0)
454 timeout = 100;
455 } else if (timeout < 0)
456 timeout = ev->timeout;
457 else if (timeout > ev->timeout)
458 timeout = ev->timeout;
459
460 /* limit the event wait time just for fiber schedule exiting
461 * quickly when no tasks left
462 */
463 if (timeout > 1000 || timeout <= 0)
464 timeout = 100;
465
466#ifdef DEL_DELAY
467 ndefer = ev->r_ndefer;
468
469 for (j = 0; j < ndefer; j++) {
470 __event_del(ev, ev->r_defers[j].fd, ev->r_defers[j].mask);
471 ev->events[ev->r_defers[j].fd].r_defer = NULL;
472 ev->r_defers[j].fd = -1;
473 ev->r_ndefer--;
474 }
475 ASSERT(ev->r_ndefer == 0);
476
477 ndefer = ev->w_ndefer;
478 for (j = 0; j < ndefer; j++) {
479 __event_del(ev, ev->w_defers[j].fd, ev->w_defers[j].mask);
480 ev->events[ev->w_defers[j].fd].w_defer = NULL;
481 ev->w_defers[j].fd = -1;
482 ev->w_ndefer--;
483 }
484 ASSERT(ev->w_ndefer == 0);
485#endif
486
487 numevents = ev->loop(ev, timeout);
488
489 for (j = 0; j < numevents; j++) {
490 fd = ev->fired[j].fd;
491 mask = ev->fired[j].mask;
492 fe = &ev->events[fd];
493 fe->mask_fired = mask;
494
495 /* note the fe->mask & mask & ... code: maybe an already
496 * processed event removed an element that fired and we
497 * still didn't processed, so we check if the event is
498 * still valid.
499 */
500 if (fe->mask & mask & EVENT_READABLE) {

Callers 1

fiber_io_loopFunction · 0.70

Calls 3

__event_delFunction · 0.85
acl_ring_pop_headFunction · 0.85
acl_stack_popFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…