diff -r 8206bfafb7a6 -r cd606400f0ba src/server/daemon/event_solaris.c --- a/src/server/daemon/event_solaris.c Sun Jun 02 10:22:12 2024 +0200 +++ b/src/server/daemon/event_solaris.c Sun Jun 02 12:39:04 2024 +0200 @@ -61,8 +61,11 @@ return ev; } +#define EV_MAX_EVENTS 32 + void ev_handle_events(EventHandler *ev) { - port_event_t events[64]; + port_event_t events[EV_MAX_EVENTS]; + Event *finished[EV_MAX_EVENTS]; struct timespec timeout; timeout.tv_nsec = 0; timeout.tv_sec = 600; @@ -70,13 +73,14 @@ for(;;) { // wait for events uint_t nev = 1; - int ret = port_getn(ev->port, events, 64, &nev, &timeout); + int ret = port_getn(ev->port, events, EV_MAX_EVENTS, &nev, &timeout); if(ret == -1) { // TODO: check for error perror("port_getn"); continue; } + int numfinished = 0; for(int i=0;iresult_errno = aiocb->aio_resultp.aio_errno; if(event->fn) { if(!event->fn(ev, event) && event->finish) { - event->finish(ev, event); + finished[numfinished++] = event; } } } @@ -115,6 +119,11 @@ } } } + // call event finish handlers + for(int i=0;ifinish(ev, event); + } } }