src/server/daemon/event_bsd.c

changeset 531
9b15b1f72bef
parent 529
cd606400f0ba
child 537
ad44e72fbf50
--- a/src/server/daemon/event_bsd.c	Sun Jun 02 13:07:48 2024 +0200
+++ b/src/server/daemon/event_bsd.c	Sun Jun 02 14:28:17 2024 +0200
@@ -34,6 +34,8 @@
 
 #include "event_bsd.h"
 
+#include "httprequest.h"
+
 EVHandler* evhandler_create(EventHandlerConfig *cfg) {
     EVHandler *ev = malloc(sizeof(EVHandler));
     ev->current = 0;
@@ -62,8 +64,6 @@
 }
 
 
-#define EV_MAX_EVENTS 32
-
 void ev_handle_events(EventHandler *ev) {
     struct timespec timeout;
     timeout.tv_nsec = 0;
@@ -85,6 +85,7 @@
         
         numchanges = 0;
         int numfinished = 0;
+        ev->numret = 0;
         for(int i=0;i<nev;i++) {
             Event *event = (Event*)events[i].udata;
             if(!event) {
@@ -144,6 +145,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);
+        }
     }
 }
 
@@ -206,3 +212,8 @@
 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