**************************************************************************/
#include <time.h>
+#include <sys/time.h>
#include <stdlib.h>
#include <stdio.h>
#include "timer.h"
-GSList* timeout_list = 0;
+GSList* timeout_list;
struct timeval next_timeout;
+GHashTable* multi_timeouts;
// functions and structs for multi timeouts
void remove_from_multi_timeout(timeout* t);
void stop_multi_timeout(timeout* t);
-GHashTable* multi_timeouts = 0;
+void default_timeout()
+{
+ timeout_list = 0;
+ multi_timeouts = 0;
+}
+
+void cleanup_timeout()
+{
+ while (timeout_list) {
+ timeout* t = timeout_list->data;
+ if (t->multi_timeout)
+ stop_multi_timeout(t);
+ free(t);
+ timeout_list = g_slist_remove(timeout_list, t);
+ }
+ if (multi_timeouts) {
+ g_hash_table_destroy(multi_timeouts);
+ multi_timeouts = 0;
+ }
+}
/** Implementation notes for timeouts: The timeouts are kept in a GSList sorted by their
* expiration time.
}
-void stop_all_timeouts()
-{
- while (timeout_list) {
- timeout* t = timeout_list->data;
- if (t->multi_timeout)
- stop_multi_timeout(t);
- free(t);
- timeout_list = g_slist_remove(timeout_list, t);
- }
-}
-
-
void add_timeout_intern(int value_msec, int interval_msec, void(*_callback)(), void* arg, timeout *t)
{
t->interval_msec = interval_msec;
if (g_slist_length(mth->timeout_list) == 1) {
timeout* last_timeout = mth->timeout_list->data;
+ mth->timeout_list = g_slist_remove(mth->timeout_list, last_timeout);
free(last_timeout->multi_timeout);
last_timeout->multi_timeout = 0;
g_hash_table_remove(multi_timeouts, last_timeout);