Merged silc_1_1_branch to trunk.
[silc.git] / lib / silcutil / tests / test_silcschedule.c
index b317b18dbb6daa9e84d1831edc0432b24a84a982..204f632fede304c8f21b84d09621f418399ff2fc 100644 (file)
@@ -13,14 +13,31 @@ typedef void (*Callback)(void *context);
 
 SilcSchedule schedule;
 
+void notify_cb(SilcSchedule schedule, SilcBool added, SilcTask task,
+              SilcBool fd_task, SilcUInt32 fd, long sec, long usec,
+              void *context)
+{
+  SILC_LOG_DEBUG(("Notify cb, %s %s task, fd %d, sec %d usec %d",
+                 added ? "added" : "deleted", fd_task ? "fd" :"timeout",
+                 fd, sec, usec));
+}
+
 SILC_TASK_CALLBACK(foo)
 {
 
 }
 
-SILC_TASK_CALLBACK(cont)
+SILC_TASK_CALLBACK(timeout)
 {
-  int i;
+  int i = (int)context;
+  SILC_LOG_DEBUG(("Timeout task %d", i));
+}
+
+SILC_TASK_CALLBACK(cont2)
+{
+#ifdef SILC_DEBUG
+  silc_schedule_stats(schedule);
+#endif /* SILC_DEBUG */
 
   SILC_LOG_DEBUG(("Adding %d fd tasks", NUM_FTASK - 10));
 
@@ -30,10 +47,19 @@ SILC_TASK_CALLBACK(cont)
 #endif
 }
 
-SILC_TASK_CALLBACK(timeout)
+SILC_TASK_CALLBACK(cont)
 {
-  int i = (int)context;
-  SILC_LOG_DEBUG(("Timeout task %d", i));
+  int i;
+
+#ifdef SILC_DEBUG
+  silc_schedule_stats(schedule);
+#endif /* SILC_DEBUG */
+
+  SILC_LOG_DEBUG(("Adding %d timeout tasks", NUM_TTASK / 3));
+  for (i = 0; i < NUM_TTASK / 3; i++)
+    silc_schedule_task_add_timeout(schedule, timeout, (void *)i, 0, 0);
+
+  silc_schedule_task_add_timeout(schedule, cont2, (void *)i, 0, 100);
 }
 
 SILC_TASK_CALLBACK(start)
@@ -54,6 +80,12 @@ SILC_TASK_CALLBACK(start)
   silc_schedule_task_add_timeout(schedule, cont, (void *)i, 0, 100);
 }
 
+SILC_TASK_CALLBACK(interrupt)
+{
+  SILC_LOG_DEBUG(("SIGINT signal"));
+  silc_schedule_stop(schedule);
+}
+
 int main(int argc, char **argv)
 {
   SilcBool success = FALSE;
@@ -69,8 +101,11 @@ int main(int argc, char **argv)
   schedule = silc_schedule_init(NUM_FTASK, NULL);
   if (!schedule)
     goto err;
+  silc_schedule_set_notify(schedule, notify_cb, NULL);
+
+  silc_schedule_task_add_signal(schedule, SIGINT, interrupt, NULL);
 
-  silc_schedule_task_add_timeout(schedule, start, NULL, 0, 1);
+  silc_schedule_task_add_timeout(schedule, start, NULL, 1, 0);
 
   SILC_LOG_DEBUG(("Running scheduler"));
   silc_schedule(schedule);