src/server/daemon/event_solaris.c

changeset 531
9b15b1f72bef
parent 529
cd606400f0ba
child 537
ad44e72fbf50
--- a/src/server/daemon/event_solaris.c	Sun Jun 02 13:07:48 2024 +0200
+++ b/src/server/daemon/event_solaris.c	Sun Jun 02 14:28:17 2024 +0200
@@ -34,6 +34,8 @@
 
 #include "event_solaris.h"
 
+#include "httprequest.h"
+
 EVHandler* evhandler_create(EventHandlerConfig *cfg) {
     EVHandler *ev = malloc(sizeof(EVHandler));
     ev->current = 0;
@@ -61,7 +63,6 @@
     return ev;
 }
 
-#define EV_MAX_EVENTS 32
 
 void ev_handle_events(EventHandler *ev) {   
     port_event_t events[EV_MAX_EVENTS];
@@ -81,6 +82,7 @@
         }
         
         int numfinished = 0;
+        ev->numret = 0;
         for(int i=0;i<nev;i++) {
             Event *event = events[i].portev_user;
             if(events[i].portev_source == PORT_SOURCE_AIO) {
@@ -124,6 +126,11 @@
             Event *event = finished[i];
             finished[i]->finish(ev, event);
         }
+        // execute return calls
+        for(int i=0;i<ev->numret;i++) {
+            EVReturn ret = ev->fnreturn[i];
+            nsapi_saf_return(ret.sn, ret.rq, ret.ret);
+        }
     }
 }
 
@@ -225,3 +232,7 @@
 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