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

Function event_loop

lib_acl/src/event/events_kernel.c:657–817  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

655}
656
657static void event_loop(ACL_EVENT *eventp)
658{
659 const char *myname = "event_loop";
660 EVENT_KERNEL *ev = (EVENT_KERNEL *) eventp;
661 int nready;
662 acl_int64 delay, when;
663 ACL_EVENT_FDTABLE *fdp;
664 EVENT_BUFFER *bp;
665
666 delay = eventp->delay_sec * 1000000 + eventp->delay_usec;
667 if (delay < DELAY_MIN) {
668 delay = DELAY_MIN;
669 }
670
671 /* �����¼������ʱ��� */
672
673 SET_TIME(eventp->present);
674
675 /* ���ݶ�ʱ����������������� epoll/kqueue/devpoll �ļ�ⳬʱ���� */
676
677 when = event_timer_when(eventp);
678 if (when > 0) {
679 acl_int64 n = when - eventp->present;
680 if (n <= 0) {
681 delay = 0;
682 } else if (n < delay) {
683 delay = n;
684 }
685 }
686
687 /* ���������ֶ����״̬������/ɾ��֮ǰ���õ������ֶ��� */
688
689 event_set_all(eventp);
690
691 if (eventp->fdcnt == 0) {
692 if (eventp->ready_cnt == 0) {
693 acl_doze(delay > DELAY_MIN ? (int) delay / 1000 : 10);
694 }
695
696 goto TAG_DONE;
697 }
698
699 /* ����Ѿ���������׼�������ⳬʱʱ���� 0 */
700
701 if (eventp->ready_cnt > 0) {
702 delay = 0;
703 }
704
705 /* ���� epoll/kquque/devpoll ϵͳ���ü����������� */
706
707 EVENT_BUFFER_READ(nready, ev->event_fd, ev->event_buf,
708 ev->event_fdslots, (int) (delay / 1000));
709
710 if (eventp->nested++ > 0) {
711 acl_msg_error("%s(%d): recursive call, nested: %d",
712 myname, __LINE__, eventp->nested);
713 exit (1);
714 }

Callers

nothing calls this directly

Calls 9

event_timer_whenFunction · 0.85
acl_dozeFunction · 0.85
acl_msg_errorFunction · 0.85
acl_last_errorFunction · 0.85
acl_last_serrorFunction · 0.85
acl_fdmap_ctxFunction · 0.85
event_timer_triggerFunction · 0.85
event_fireFunction · 0.85
event_set_allFunction · 0.70

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…