Added small timeout balancing value from 40 to 60 in Scheduler.
[runtime.git] / lib / silcutil / silcschedule.c
index 5550181a7da686d070e2103a6a1d8ac33140e9dd..b88044306f6c6f96db6b068821a5a262d8d884db 100644 (file)
@@ -4,7 +4,7 @@
 
   Author: Pekka Riikonen <priikone@silcnet.org>
 
-  Copyright (C) 1998 - 2007 Pekka Riikonen
+  Copyright (C) 1998 - 2008 Pekka Riikonen
 
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -16,9 +16,8 @@
   GNU General Public License for more details.
 
 */
-/* $Id$ */
 
-#include "silc.h"
+#include "silcruntime.h"
 
 /************************** Types and definitions ***************************/
 
@@ -127,7 +126,7 @@ static void silc_schedule_dispatch_timeout(SilcSchedule schedule,
     silc_schedule_task_remove(schedule, t);
 
     /* Balance when we have lots of small timeouts */
-    if (silc_unlikely((++count) > 40))
+    if (silc_unlikely((++count) > 60))
       break;
   } while (silc_likely((task = silc_list_get(schedule->timeout_queue))));
 }
@@ -227,13 +226,15 @@ static void silc_schedule_task_remove(SilcSchedule schedule, SilcTask task)
 
     /* Delete even tasks */
     parent = silc_schedule_get_parent(schedule);
-    silc_hash_table_list(parent->events, &htl);
-    while (silc_hash_table_get(&htl, NULL, (void *)&etask)) {
-      silc_hash_table_del_by_context(parent->events, etask->event, etask);
-      silc_free(etask->event);
-      silc_free(etask);
+    if (parent->events) {
+      silc_hash_table_list(parent->events, &htl);
+      while (silc_hash_table_get(&htl, NULL, (void *)&etask)) {
+       silc_hash_table_del_by_context(parent->events, etask->event, etask);
+       silc_free(etask->event);
+       silc_free(etask);
+      }
+      silc_hash_table_list_reset(&htl);
     }
-    silc_hash_table_list_reset(&htl);
     return;
   }
 
@@ -880,10 +881,12 @@ SilcBool silc_schedule_task_del(SilcSchedule schedule, SilcTask task)
 
     /* Delete even tasks */
     parent = silc_schedule_get_parent(schedule);
-    silc_hash_table_list(parent->events, &htl);
-    while (silc_hash_table_get(&htl, NULL, (void *)&task))
-      task->valid = FALSE;
-    silc_hash_table_list_reset(&htl);
+    if (parent->events) {
+      silc_hash_table_list(parent->events, &htl);
+      while (silc_hash_table_get(&htl, NULL, (void *)&task))
+       task->valid = FALSE;
+      silc_hash_table_list_reset(&htl);
+    }
 
     SILC_SCHEDULE_UNLOCK(schedule);
     return TRUE;