src/server/daemon/event_solaris.c

changeset 541
1e1fca11aaff
parent 537
ad44e72fbf50
child 547
280bf87c8689
--- 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;i<cfg->nthreads;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;i<ev->numret;i++) {
-            EVReturn ret = ev->fnreturn[i];
+        for(int i=0;i<ev->base.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 };
-}

mercurial