Fix git-version file creation.
[paraslash.git] / sched.c
diff --git a/sched.c b/sched.c
index 62d45d5269e44dd95c55c916f4e6150db3ed2999..b0e9ce12f221e901d761108899d98190ccf984d6 100644 (file)
--- a/sched.c
+++ b/sched.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
  *
  * Licensed under the GPL v2. For licencing details see COPYING.
  */
@@ -17,6 +17,7 @@
 #include "list.h"
 #include "sched.h"
 #include "string.h"
+#include "time.h"
 #include "error.h"
 
 static struct list_head pre_select_list, post_select_list;
@@ -68,13 +69,33 @@ static void sched_preselect(struct sched *s)
        }
 }
 
+//#define SCHED_DEBUG 1
+static inline void call_post_select(struct sched *s, struct task *t)
+{
+#ifndef SCHED_DEBUG
+       t->post_select(s, t);
+#else
+       struct timeval t1, t2, diff;
+       unsigned long pst;
+
+       gettimeofday(&t1, NULL);
+       t->post_select(s, t);
+       gettimeofday(&t2, NULL);
+       tv_diff(&t1, &t2, &diff);
+       pst = tv2ms(&diff);
+       if (pst > 50)
+               PARA_WARNING_LOG("%s: post_select time: %lums\n",
+                       t->status, pst);
+#endif
+}
+
 static void sched_post_select(struct sched *s)
 {
        struct task *t, *tmp;
 
        list_for_each_entry_safe(t, tmp, &post_select_list, post_select_node) {
                if (t->error >= 0)
-                       t->post_select(s, t);
+                       call_post_select(s, t);
 //             PARA_INFO_LOG("%s: %d\n", t->status, t->ret);
                if (t->error >= 0)
                        continue;
@@ -111,13 +132,14 @@ int schedule(struct sched *s)
 again:
        FD_ZERO(&s->rfds);
        FD_ZERO(&s->wfds);
-       s->timeout = s->default_timeout;
+       s->select_timeout = s->default_timeout;
        s->max_fileno = -1;
        gettimeofday(now, NULL);
        sched_preselect(s);
        if (list_empty(&pre_select_list) && list_empty(&post_select_list))
                return 0;
-       ret = s->select_function(s->max_fileno + 1, &s->rfds, &s->wfds, &s->timeout);
+       ret = s->select_function(s->max_fileno + 1, &s->rfds, &s->wfds,
+               &s->select_timeout);
        if (ret < 0)
                return ret;
        if (ret == 0) {
@@ -270,26 +292,26 @@ int kill_task(char *id)
  */
 void sched_min_delay(struct sched *s)
 {
-       s->timeout.tv_sec = 0;
-       s->timeout.tv_usec = 1;
+       s->select_timeout.tv_sec = 0;
+       s->select_timeout.tv_usec = 1;
 }
 
 /**
  * Impose an upper bound for the timeout of the next select() call.
  *
- * \param timeout Maximal allowed timeout.
+ * \param to Maximal allowed timeout.
  * \param s Pointer to the scheduler struct.
  *
- * If the current scheduler timeout is already smaller than \a timeout, this
+ * If the current scheduler timeout is already smaller than \a to, this
  * function does nothing. Otherwise the timeout for the next select() call is
  * set to the given value.
  *
  * \sa sched_request_timeout_ms().
  */
-void sched_request_timeout(struct timeval *timeout, struct sched *s)
+void sched_request_timeout(struct timeval *to, struct sched *s)
 {
-       if (tv_diff(&s->timeout, timeout, NULL) > 0)
-               s->timeout = *timeout;
+       if (tv_diff(&s->select_timeout, to, NULL) > 0)
+               s->select_timeout = *to;
 }
 
 /**