r18191: Fix the online/offline state handling of winbindd.
[metze/samba/wip.git] / source3 / lib / events.c
index 6db9930c300685e6b0be442c11a00f24b6f6877b..7da44c3466294ee3804678e8ceffe5df578266bd 100644 (file)
@@ -79,27 +79,24 @@ struct timed_event *add_timed_event(TALLOC_CTX *mem_ctx,
 
 void run_events(void)
 {
-       struct timeval now;
-
-       if (timed_events == NULL) {
-               /* No syscall if there are no events */
-               DEBUG(11, ("run_events: No events\n"));
-               return;
-       }
+       /* Run all events that are pending, not just one (as we
+          did previously. */
 
-       GetTimeOfDay(&now);
+       while (timed_events) {
+               struct timeval now;
+               GetTimeOfDay(&now);
 
-       if (timeval_compare(&now, &timed_events->when) < 0) {
-               /* Nothing to do yet */
-               DEBUG(11, ("run_events: Nothing to do\n"));
-               return;
-       }
+               if (timeval_compare(&now, &timed_events->when) < 0) {
+                       /* Nothing to do yet */
+                       DEBUG(11, ("run_events: Nothing to do\n"));
+                       return;
+               }
 
-       DEBUG(10, ("Running event \"%s\" %lx\n", timed_events->event_name,
-               (unsigned long)timed_events));
+               DEBUG(10, ("Running event \"%s\" %lx\n", timed_events->event_name,
+                       (unsigned long)timed_events));
 
-       timed_events->handler(timed_events, &now, timed_events->private_data);
-       return;
+               timed_events->handler(timed_events, &now, timed_events->private_data);
+       }
 }
 
 struct timeval *get_timed_events_timeout(struct timeval *to_ret)