What's the point of putting these onto the event queue? Wouldn't this
be better done with something like this?

NB: I would submit a proper patch for this if it was.

---------------------
--- mad-squid-ev0/src/event.cc  8 Jan 2013 17:36:44 -0000       1.1.1.3
+++ mad-squid-ev0/src/event.cc  30 Jan 2013 01:40:17 -0000
@@ -233,6 +233,17 @@
     return result;
 }
 
+static void
+fireEvent(char const *name, EVH *func, void *arg, bool cbdata)
+{
+    /* XXX assumes name is static memory! */
+    AsyncCall::Pointer call = asyncCall(41,5, name,
+                                       EventDialer(func, arg, cbdata));
+    ScheduleCallHere(call);
+
+    last_event_ran = name; // XXX: move this to AsyncCallQueue
+}
+
 int
 EventScheduler::checkEvents(int timeout)
 {
@@ -253,12 +264,8 @@
         if (event->when > current_dtime)
             break;
 
-        /* XXX assumes event->name is static memory! */
-        AsyncCall::Pointer call = asyncCall(41,5, event->name,
-                                            EventDialer(event->func, 
event->arg, event->cbdata));
-        ScheduleCallHere(call);
+       fireEvent(event->name, event->func, event->arg, event->cbdata);
 
-        last_event_ran = event->name; // XXX: move this to AsyncCallQueue
         const bool heavy = event->weight &&
                            (!event->cbdata || 
cbdataReferenceValid(event->arg));
 
@@ -332,10 +339,12 @@
 void
 EventScheduler::schedule(const char *name, EVH * func, void *arg, double when, 
int weight, bool cbdata)
 {
-    // Use zero timestamp for when=0 events: Many of them are async calls that
-    // must fire in the submission order. We cannot use current_dtime for them
-    // because it may decrease if system clock is adjusted backwards.
-    const double timestamp = when > 0.0 ? current_dtime + when : 0;
+    if (when == 0.0) {
+       fireEvent(name, func, arg, cbdata);
+       return;
+    }
+    
+    const double timestamp = current_dtime + when;
     ev_entry *event = new ev_entry(name, func, arg, timestamp, weight, cbdata);
 
     ev_entry **E;
-----------------------

Reply via email to