add units to time, use configuration time api where appropriate, fixing Mantis #1875
[oweals/gnunet.git] / src / util / scheduler.c
index e2f6700e4b20918917e9963828510bb038c9f4ec..7254b1700548f6c10029606b89dcc0437afe9522 100644 (file)
 #include "gnunet_signal_lib.h"
 #include "gnunet_time_lib.h"
 #include "disk.h"
+#define LOG(kind,...) GNUNET_log_from (kind, "util", __VA_ARGS__)
+
+#define LOG_STRERROR(kind,syscall) GNUNET_log_from_strerror (kind, "util", syscall)
 #ifdef LINUX
 #include "execinfo.h"
 
 
+
 /**
  * Use lsof to generate file descriptor reports on select error?
  * (turn off for stable releases).
@@ -48,7 +52,7 @@
 /**
  * Check each file descriptor before adding
  */
-#define DEBUG_FDS GNUNET_NO
+#define DEBUG_FDS GNUNET_EXTRA_LOGGING
 
 /**
  * Depth of the traces collected via EXECINFO.
@@ -56,7 +60,7 @@
 #define MAX_TRACE_DEPTH 50
 #endif
 
-#define DEBUG_TASKS GNUNET_NO
+#define DEBUG_TASKS GNUNET_EXTRA_LOGGING
 
 /**
  * Should we figure out which tasks are delayed for a while
@@ -523,9 +527,8 @@ check_ready (const struct GNUNET_NETWORK_FDSet *rs,
   while (pos != NULL)
   {
 #if DEBUG_TASKS
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-                "Checking readiness of task: %llu / %p\n", pos->id,
-                pos->callback_cls);
+    LOG (GNUNET_ERROR_TYPE_DEBUG, "Checking readiness of task: %llu / %p\n",
+         pos->id, pos->callback_cls);
 #endif
     next = pos->next;
     if (GNUNET_YES == is_ready (pos, now, rs, ws))
@@ -655,11 +658,10 @@ run_ready (struct GNUNET_NETWORK_FDSet *rs, struct GNUNET_NETWORK_FDSet *ws)
     if (GNUNET_TIME_absolute_get_duration (pos->start_time).rel_value >
         DELAY_THRESHOLD.rel_value)
     {
-      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                  "Task %llu took %llums to be scheduled\n", pos->id,
-                  (unsigned long long)
-                  GNUNET_TIME_absolute_get_duration
-                  (pos->start_time).rel_value);
+      LOG (GNUNET_ERROR_TYPE_ERROR, "Task %llu took %llums to be scheduled\n",
+           pos->id,
+           (unsigned long long)
+           GNUNET_TIME_absolute_get_duration (pos->start_time).rel_value);
     }
 #endif
     tc.reason = pos->reason;
@@ -674,18 +676,18 @@ run_ready (struct GNUNET_NETWORK_FDSet *rs, struct GNUNET_NETWORK_FDSet *ws)
     if (((tc.reason & GNUNET_SCHEDULER_REASON_WRITE_READY) != 0) &&
         (pos->write_fd != -1) &&
         (!GNUNET_NETWORK_fdset_test_native (ws, pos->write_fd)))
-      abort ();                 // added to ready in previous select loop!
+      GNUNET_abort ();                 // added to ready in previous select loop!
 #if DEBUG_TASKS
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Running task: %llu / %p\n", pos->id,
-                pos->callback_cls);
+    LOG (GNUNET_ERROR_TYPE_DEBUG, "Running task: %llu / %p\n", pos->id,
+         pos->callback_cls);
 #endif
     pos->callback (pos->callback_cls, &tc);
 #if EXECINFO
     int i;
 
     for (i = 0; i < pos->num_backtrace_strings; i++)
-      GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Task %llu trace %d: %s\n", pos->id,
-                  i, pos->backtrace_strings[i]);
+      LOG (GNUNET_ERROR_TYPE_ERROR, "Task %llu trace %d: %s\n", pos->id, i,
+           pos->backtrace_strings[i]);
 #endif
     active_task = NULL;
     destroy_task (pos);
@@ -838,7 +840,7 @@ GNUNET_SCHEDULER_run (GNUNET_SCHEDULER_Task task, void *task_cls)
       if (errno == EINTR)
         continue;
 
-      GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "select");
+      LOG_STRERROR (GNUNET_ERROR_TYPE_ERROR, "select");
 #ifndef MINGW
 #if USE_LSOF
       char lsof[512];
@@ -847,16 +849,15 @@ GNUNET_SCHEDULER_run (GNUNET_SCHEDULER_Task task, void *task_cls)
       (void) close (1);
       (void) dup2 (2, 1);
       if (0 != system (lsof))
-        GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "system");
+        LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING, "system");
 #endif
 #endif
-      abort ();
+      GNUNET_abort ();
       break;
     }
     if ((ret == 0) && (timeout.rel_value == 0) && (busy_wait_warning > 16))
     {
-      GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-                  _("Looks like we're busy waiting...\n"));
+      LOG (GNUNET_ERROR_TYPE_WARNING, _("Looks like we're busy waiting...\n"));
       sleep (1);                /* mitigate */
     }
     check_ready (rs, ws);
@@ -986,9 +987,8 @@ GNUNET_SCHEDULER_cancel (GNUNET_SCHEDULER_TaskIdentifier task)
     p++;
     if (p >= GNUNET_SCHEDULER_PRIORITY_COUNT)
     {
-      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                  _("Attempt to cancel dead task %llu!\n"),
-                  (unsigned long long) task);
+      LOG (GNUNET_ERROR_TYPE_ERROR, _("Attempt to cancel dead task %llu!\n"),
+           (unsigned long long) task);
       GNUNET_assert (0);
     }
     prev = NULL;
@@ -1028,8 +1028,8 @@ GNUNET_SCHEDULER_cancel (GNUNET_SCHEDULER_TaskIdentifier task)
   }
   ret = t->callback_cls;
 #if DEBUG_TASKS
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Canceling task: %llu / %p\n", task,
-              t->callback_cls);
+  LOG (GNUNET_ERROR_TYPE_DEBUG, "Canceling task: %llu / %p\n", task,
+       t->callback_cls);
 #endif
   destroy_task (t);
   return ret;
@@ -1076,8 +1076,8 @@ GNUNET_SCHEDULER_add_continuation (GNUNET_SCHEDULER_Task task, void *task_cls,
   t->priority = current_priority;
   t->lifeness = current_lifeness;
 #if DEBUG_TASKS
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Adding continuation task: %llu / %p\n",
-              t->id, t->callback_cls);
+  LOG (GNUNET_ERROR_TYPE_DEBUG, "Adding continuation task: %llu / %p\n", t->id,
+       t->callback_cls);
 #endif
   queue_ready_task (t);
 }
@@ -1206,15 +1206,15 @@ GNUNET_SCHEDULER_add_delayed (struct GNUNET_TIME_Relative delay,
   pending_timeout_last = t;
 
 #if DEBUG_TASKS
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Adding task: %llu / %p\n", t->id,
-              t->callback_cls);
+  LOG (GNUNET_ERROR_TYPE_DEBUG, "Adding task: %llu / %p\n", t->id,
+       t->callback_cls);
 #endif
 #if EXECINFO
   int i;
 
   for (i = 0; i < t->num_backtrace_strings; i++)
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Task %llu trace %d: %s\n", t->id, i,
-                t->backtrace_strings[i]);
+    LOG (GNUNET_ERROR_TYPE_DEBUG, "Task %llu trace %d: %s\n", t->id, i,
+         t->backtrace_strings[i]);
 #endif
   return t->id;
 
@@ -1308,7 +1308,7 @@ GNUNET_SCHEDULER_add_now_with_lifeness (int lifeness,
  *         only valid until "task" is started!
  */
 #ifndef MINGW
-GNUNET_SCHEDULER_TaskIdentifier
+static GNUNET_SCHEDULER_TaskIdentifier
 add_without_sets (struct GNUNET_TIME_Relative delay, int rfd, int wfd,
                   GNUNET_SCHEDULER_Task task, void *task_cls)
 {
@@ -1333,16 +1333,14 @@ add_without_sets (struct GNUNET_TIME_Relative delay, int rfd, int wfd,
   {
     int flags = fcntl (rfd, F_GETFD);
 
-    if (flags == -1 && errno == EBADF)
+    if ((flags == -1) && (errno == EBADF))
     {
-      GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Got invalid file descriptor %d!\n",
-                  rfd);
+      LOG (GNUNET_ERROR_TYPE_ERROR, "Got invalid file descriptor %d!\n", rfd);
 #if EXECINFO
       int i;
 
       for (i = 0; i < t->num_backtrace_strings; i++)
-        GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Trace: %s\n",
-                    t->backtrace_strings[i]);
+        LOG (GNUNET_ERROR_TYPE_DEBUG, "Trace: %s\n", t->backtrace_strings[i]);
 #endif
       GNUNET_assert (0);
     }
@@ -1353,14 +1351,12 @@ add_without_sets (struct GNUNET_TIME_Relative delay, int rfd, int wfd,
 
     if (flags == -1 && errno == EBADF)
     {
-      GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Got invalid file descriptor %d!\n",
-                  wfd);
+      LOG (GNUNET_ERROR_TYPE_ERROR, "Got invalid file descriptor %d!\n", wfd);
 #if EXECINFO
       int i;
 
       for (i = 0; i < t->num_backtrace_strings; i++)
-        GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Trace: %s\n",
-                    t->backtrace_strings[i]);
+        LOG (GNUNET_ERROR_TYPE_DEBUG, "Trace: %s\n", t->backtrace_strings[i]);
 #endif
       GNUNET_assert (0);
     }
@@ -1381,15 +1377,15 @@ add_without_sets (struct GNUNET_TIME_Relative delay, int rfd, int wfd,
   pending = t;
   max_priority_added = GNUNET_MAX (max_priority_added, t->priority);
 #if DEBUG_TASKS
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Adding task: %llu / %p\n", t->id,
-              t->callback_cls);
+  LOG (GNUNET_ERROR_TYPE_DEBUG, "Adding task: %llu / %p\n", t->id,
+       t->callback_cls);
 #endif
 #if EXECINFO
   int i;
 
   for (i = 0; i < t->num_backtrace_strings; i++)
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Task %llu trace %d: %s\n", t->id, i,
-                t->backtrace_strings[i]);
+    LOG (GNUNET_ERROR_TYPE_DEBUG, "Task %llu trace %d: %s\n", t->id, i,
+         t->backtrace_strings[i]);
 #endif
   return t->id;
 }
@@ -1653,15 +1649,15 @@ GNUNET_SCHEDULER_add_select (enum GNUNET_SCHEDULER_Priority prio,
   pending = t;
   max_priority_added = GNUNET_MAX (max_priority_added, t->priority);
 #if DEBUG_TASKS
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Adding task: %llu / %p\n", t->id,
-              t->callback_cls);
+  LOG (GNUNET_ERROR_TYPE_DEBUG, "Adding task: %llu / %p\n", t->id,
+       t->callback_cls);
 #endif
 #if EXECINFO
   int i;
 
   for (i = 0; i < t->num_backtrace_strings; i++)
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Task %llu trace %d: %s\n", t->id, i,
-                t->backtrace_strings[i]);
+    LOG (GNUNET_ERROR_TYPE_DEBUG, "Task %llu trace %d: %s\n", t->id, i,
+         t->backtrace_strings[i]);
 #endif
   return t->id;
 }