fixed some missing includes
[NeonServV5.git] / src / timeq.c
index b53b58ddd25689d91674d75537e6bcb25c289560..c95068ddaf0ea128c4ff108f4ee07fc5a703c975 100644 (file)
@@ -1,4 +1,4 @@
-/* timeq.c - NeonServ v5.5
+/* timeq.c - NeonServ v5.6
  * Copyright (C) 2011-2012  Philipp Kreil (pk910)
  * 
  * This program is free software: you can redistribute it and/or modify
@@ -17,6 +17,7 @@
 
 #include "timeq.h"
 #include "IOHandler.h"
+#include "tools.h"
 
 static struct timeq_entry *timeq_events;
 #ifdef HAVE_THREADS
@@ -29,6 +30,7 @@ static IOHANDLER_CALLBACK(timeq_callback) {
     switch(event->type) {
     case IOEVENT_TIMEOUT:
         entry->callback(entry->data);
+        entry->iofd = NULL;
         timeq_del(entry);
         break;
     default:
@@ -48,10 +50,12 @@ struct timeq_entry* timeq_uadd(int useconds, int module_id, timeq_callback_t *ca
         perror("malloc() failed");
         return NULL;
     }
+    #ifdef HAVE_THREADS
     if(!pthread_mutex_initialized) {
         THREAD_MUTEX_INIT(synchronized);
         pthread_mutex_initialized = 1;
     }
+    #endif
     gettimeofday(&timeout, NULL);
     SYNCHRONIZE(synchronized);
     timeout.tv_usec += (useconds % 1000);
@@ -64,7 +68,8 @@ struct timeq_entry* timeq_uadd(int useconds, int module_id, timeq_callback_t *ca
     entry->name = NULL;
     entry->next = timeq_events;
     entry->prev = NULL;
-    timeq_events->prev = entry;
+    if(timeq_events)
+        timeq_events->prev = entry;
     timeq_events = entry;
     DESYNCHRONIZE(synchronized);
     return entry;
@@ -81,7 +86,9 @@ struct timeq_entry* timeq_uadd_name(char *name, int useconds, int module_id, tim
 }
 
 int timeq_del(struct timeq_entry* entry) {
+    #ifdef HAVE_THREADS
     if(!pthread_mutex_initialized) return 0;
+    #endif
     SYNCHRONIZE(synchronized);
     if(entry->next)
         entry->next->prev = entry->prev;
@@ -91,7 +98,8 @@ int timeq_del(struct timeq_entry* entry) {
         timeq_events = entry->next;
     if(entry->name)
         free(entry->name);
-    iohandler_close(entry->iofd);
+    if(entry->iofd)
+        iohandler_close(entry->iofd);
     free(entry);
     DESYNCHRONIZE(synchronized);
     return 1;