s3:events: pass __location__ to event_loop_*()
[ira/wip.git] / source3 / lib / events.c
index 4484d5323bcc3bd5b86c24cf14b5c5d39015a3c6..8c56941829002030cbb654beb1fcc7d030c1e37b 100644 (file)
@@ -83,45 +83,24 @@ bool event_add_to_select_args(struct tevent_context *ev,
 bool run_events(struct tevent_context *ev,
                int selrtn, fd_set *read_fds, fd_set *write_fds)
 {
-       bool fired = false;
-       struct tevent_fd *fde, *next;
+       struct tevent_fd *fde;
+       struct timeval now;
 
        if (ev->signal_events &&
            tevent_common_check_signal(ev)) {
                return true;
        }
 
-       /* Run all events that are pending, not just one (as we
-          did previously. */
-
-       while (ev->timer_events) {
-               struct timeval now;
-               GetTimeOfDay(&now);
-
-               if (timeval_compare(
-                           &now, &ev->timer_events->next_event) < 0) {
-                       /* Nothing to do yet */
-                       DEBUG(11, ("run_events: Nothing to do\n"));
-                       break;
-               }
+       GetTimeOfDay(&now);
 
-               DEBUG(10, ("Running event \"%s\" %p\n",
-                          ev->timer_events->handler_name,
-                          ev->timer_events));
+       if ((ev->timer_events != NULL)
+           && (timeval_compare(&now, &ev->timer_events->next_event) >= 0)) {
 
-               ev->timer_events->handler(
-                       ev,
-                       ev->timer_events, now,
-                       ev->timer_events->private_data);
+               DEBUG(10, ("Running timed event \"%s\" %p\n",
+                          ev->timer_events->handler_name, ev->timer_events));
 
-               fired = true;
-       }
-
-       if (fired) {
-               /*
-                * We might have changed the socket status during the timed
-                * events, return to run select again.
-                */
+               ev->timer_events->handler(ev, ev->timer_events, now,
+                                         ev->timer_events->private_data);
                return true;
        }
 
@@ -129,23 +108,22 @@ bool run_events(struct tevent_context *ev,
                /*
                 * No fd ready
                 */
-               return fired;
+               return false;
        }
 
-       for (fde = ev->fd_events; fde; fde = next) {
+       for (fde = ev->fd_events; fde; fde = fde->next) {
                uint16 flags = 0;
 
-               next = fde->next;
                if (FD_ISSET(fde->fd, read_fds)) flags |= EVENT_FD_READ;
                if (FD_ISSET(fde->fd, write_fds)) flags |= EVENT_FD_WRITE;
 
                if (flags & fde->flags) {
                        fde->handler(ev, fde, flags, fde->private_data);
-                       fired = true;
+                       return true;
                }
        }
 
-       return fired;
+       return false;
 }
 
 
@@ -167,7 +145,7 @@ struct timeval *get_timed_events_timeout(struct tevent_context *ev,
        return to_ret;
 }
 
-static int s3_event_loop_once(struct tevent_context *ev)
+static int s3_event_loop_once(struct tevent_context *ev, const char *location)
 {
        struct timeval now, to;
        fd_set r_fds, w_fds;
@@ -203,12 +181,12 @@ static int s3_event_loop_once(struct tevent_context *ev)
        return 0;
 }
 
-static int s3_event_loop_wait(struct tevent_context *ev)
+static int s3_event_loop_wait(struct tevent_context *ev, const char *location)
 {
        int ret = 0;
 
        while (ret == 0) {
-               ret = s3_event_loop_once(ev);
+               ret = s3_event_loop_once(ev, location);
        }
 
        return ret;
@@ -304,12 +282,13 @@ static void s3_event_debug(void *context, enum tevent_debug_level level,
                samba_level = 2;
                break;
        case TEVENT_DEBUG_TRACE:
-               samba_level = 5;
+               samba_level = 10;
                break;
 
        };
-       vasprintf(&s, fmt, ap);
-       if (!s) return;
+       if (vasprintf(&s, fmt, ap) == -1) {
+               return;
+       }
        DEBUG(samba_level, ("s3_event: %s", s));
        free(s);
 }