diff -r 8206bfafb7a6 -r cd606400f0ba src/server/daemon/event_linux.c --- a/src/server/daemon/event_linux.c Sun Jun 02 10:22:12 2024 +0200 +++ b/src/server/daemon/event_linux.c Sun Jun 02 12:39:04 2024 +0200 @@ -84,12 +84,13 @@ return ev; } +#define EV_MAX_EVENTS 32 void ev_handle_events(EventHandler *ev) { int ep = ev->ep; - //port_event_t events[16]; - struct epoll_event events[16]; + struct epoll_event events[EV_MAX_EVENTS]; + Event* finished[EV_MAX_EVENTS]; for(;;) { /* wait for events */ @@ -99,6 +100,7 @@ continue; } + int numfinished = 0; for(int i=0;ifinish + // if set, remember this event and + // execute event->finish later if(event->finish) { - event->finish(ev, event); + finished[numfinished++] = event; + //event->finish(ev, event); } } else { if(saved_ev != event->events) { @@ -158,6 +162,11 @@ } } } + // call event finish handlers + for(int i=0;ifinish(ev, event); + } } }