diff -r d9c3c23c635b -r 1e1fca11aaff src/server/daemon/event_solaris.c --- a/src/server/daemon/event_solaris.c Sun Aug 11 10:09:20 2024 +0200 +++ b/src/server/daemon/event_solaris.c Sun Aug 11 13:26:17 2024 +0200 @@ -43,8 +43,9 @@ ev->numins = cfg->nthreads; for(int i=0;inthreads;i++) { - EventHandler *handler = malloc(sizeof(EventHandler)); - ev->instances[i] = handler; + EventHandlerSolaris *handler = malloc(sizeof(EventHandlerSolaris)); + memset(handler, 0, sizeof(EventHandlerSolaris)); + ev->instances[i] = (EventHandler*)handler; handler->port = port_create(); if(handler->port < 0) { @@ -64,7 +65,8 @@ } -void ev_handle_events(EventHandler *ev) { +void ev_handle_events(EventHandlerSolaris *ev) { + EventHandler *h = (EventHandler*)ev; port_event_t events[EV_MAX_EVENTS]; Event *finished[EV_MAX_EVENTS]; struct timespec timeout; @@ -92,7 +94,7 @@ aio->result = aiocb->aio_resultp.aio_return; aio->result_errno = aiocb->aio_resultp.aio_errno; if(event->fn) { - if(!event->fn(ev, event) && event->finish) { + if(!event->fn(h, event) && event->finish) { finished[numfinished++] = event; } } @@ -116,7 +118,7 @@ perror("port_associate"); } } else if(event->finish) { - event->finish(ev, event); + event->finish(h, event); } } } @@ -130,8 +132,8 @@ } } // execute return calls - for(int i=0;inumret;i++) { - EVReturn ret = ev->fnreturn[i]; + for(int i=0;ibase.numret;i++) { + EVReturn ret = ev->base.fnreturn[i]; nsapi_saf_return(ret.sn, ret.rq, ret.ret); } } @@ -150,10 +152,11 @@ int ev_pollin(EventHandler *h, int fd, Event *event) { + EventHandlerSolaris *ev = (EventHandlerSolaris*)h; event->object = (intptr_t)fd; event->events = EVENT_POLLIN; return port_associate( - h->port, + ev->port, PORT_SOURCE_FD, (uintptr_t)fd, POLLIN, @@ -161,10 +164,11 @@ } int ev_pollout(EventHandler *h, int fd, Event *event) { + EventHandlerSolaris *ev = (EventHandlerSolaris*)h; event->object = (intptr_t)fd; event->events = EVENT_POLLOUT; return port_associate( - h->port, + ev->port, PORT_SOURCE_FD, (uintptr_t)fd, POLLOUT, @@ -172,17 +176,19 @@ } int ev_remove_poll(EventHandler *h, int fd) { - return port_dissociate(h->port, PORT_SOURCE_FD, (uintptr_t)fd); + EventHandlerSolaris *ev = (EventHandlerSolaris*)h; + return port_dissociate(ev->port, PORT_SOURCE_FD, (uintptr_t)fd); } int event_send(EventHandler *h, Event *event) { + EventHandlerSolaris *ev = (EventHandlerSolaris*)h; event->object = 0; event->events = 0; - return port_send(h->port, 0, event); + return port_send(ev->port, 0, event); } static int ev_aio(int fd, aiocb_s *cb, WSBool read) { - EventHandler *ev = cb->evhandler; + EventHandlerSolaris *ev = cb->evhandler; if(!ev) { return -1; } @@ -235,7 +241,3 @@ int event_removepoll(EventHandler *ev, SYS_NETFD fd) { return ((IOStream*)fd)->poll(fd, ev, IO_POLL_NONE, NULL); } - -void ev_saf_return(EventHandler *h, Session *sn, Request *rq, int ret) { - h->fnreturn[h->numret++] = (EVReturn){ sn, rq, ret }; -}