src/server/daemon/event_linux.c

changeset 529
cd606400f0ba
parent 474
eb7640c59e9b
child 531
9b15b1f72bef
--- a/src/server/daemon/event_linux.c	Sun Jun 02 10:22:12 2024 +0200
+++ b/src/server/daemon/event_linux.c	Sun Jun 02 12:39:04 2024 +0200
@@ -84,12 +84,13 @@
     return ev;
 }
 
+#define EV_MAX_EVENTS 32
 
 void ev_handle_events(EventHandler *ev) {
     int ep = ev->ep;
     
-    //port_event_t events[16];
-    struct epoll_event events[16];
+    struct epoll_event events[EV_MAX_EVENTS];
+    Event* finished[EV_MAX_EVENTS];
     
     for(;;) {
         /* wait for events */
@@ -99,6 +100,7 @@
             continue;
         }
         
+        int numfinished = 0;
         for(int i=0;i<ret;i++) {
             Event *event = events[i].data.ptr;
             if(!event) {
@@ -134,9 +136,11 @@
                                 strerror(errno));
                     }
                     
-                    // if set, execute event->finish
+                    // if set, remember this event and 
+                    // execute event->finish later
                     if(event->finish) {
-                        event->finish(ev, event);
+                        finished[numfinished++] = event;
+                        //event->finish(ev, event);
                     }
                 } else {
                     if(saved_ev != event->events) {
@@ -158,6 +162,11 @@
                 }
             }
         }
+        // call event finish handlers
+        for(int i=0;i<numfinished;i++) {
+            Event *event = finished[i];
+            finished[i]->finish(ev, event);
+        }
     }
 }
 

mercurial