| 655 | } |
| 656 | |
| 657 | static 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 | } |
nothing calls this directly
no test coverage detected
searching dependent graphs…