]> Dogcows Code - chaz/tint2/blobdiff - src/util/timer.c
*fix* warning
[chaz/tint2] / src / util / timer.c
index 1dd2f11c36cb844286c0ac04603f47e4d75fc2cd..9f7ca0d65c85713e9d951e7facf4cd14eefef65d 100644 (file)
@@ -46,6 +46,21 @@ struct _timeout {
        multi_timeout* multi_timeout;
 };
 
+void add_timeout_intern(int value_msec, int interval_msec, void(*_callback)(void*), void* arg, timeout* t);
+gint compare_timeouts(gconstpointer t1, gconstpointer t2);
+gint compare_timespecs(const struct timespec* t1, const struct timespec* t2);
+int timespec_subtract(struct timespec* result, struct timespec* x, struct timespec* y);
+struct timespec add_msec_to_timespec(struct timespec ts, int msec);
+
+
+int align_with_existing_timeouts(timeout* t);
+void create_multi_timeout(timeout* t1, timeout* t2);
+void append_multi_timeout(timeout* t1, timeout* t2);
+int calc_multi_timeout_interval(multi_timeout_handler* mth);
+void update_multi_timeout_values(multi_timeout_handler* mth);
+void callback_multi_timeout(void* mth);
+void remove_from_multi_timeout(timeout* t);
+void stop_multi_timeout(timeout* t);
 
 void default_timeout()
 {
@@ -55,7 +70,6 @@ void default_timeout()
 
 void cleanup_timeout()
 {
-printf("*** cleanup_timeout()\n");
        while (timeout_list) {
                timeout* t = timeout_list->data;
                if (t->multi_timeout)
@@ -63,24 +77,12 @@ printf("*** cleanup_timeout()\n");
                free(t);
                timeout_list = g_slist_remove(timeout_list, t);
        }
+       if (multi_timeouts) {
+               g_hash_table_destroy(multi_timeouts);
+               multi_timeouts = 0;
+       }
 }
 
-void add_timeout_intern(int value_msec, int interval_msec, void(*_callback)(void*), void* arg, timeout* t);
-gint compare_timeouts(gconstpointer t1, gconstpointer t2);
-gint compare_timespecs(const struct timespec* t1, const struct timespec* t2);
-int timespec_subtract(struct timespec* result, struct timespec* x, struct timespec* y);
-struct timespec add_msec_to_timespec(struct timespec ts, int msec);
-
-
-int align_with_existing_timeouts(timeout* t);
-void create_multi_timeout(timeout* t1, timeout* t2);
-void append_multi_timeout(timeout* t1, timeout* t2);
-int calc_multi_timeout_interval(multi_timeout_handler* mth);
-void update_multi_timeout_values(multi_timeout_handler* mth);
-void callback_multi_timeout(void* mth);
-void remove_from_multi_timeout(timeout* t);
-void stop_multi_timeout(timeout* t);
-
 /** Implementation notes for timeouts: The timeouts are kept in a GSList sorted by their
        * expiration time.
        * That means that update_next_timeout() only have to consider the first timeout in the list,
@@ -396,6 +398,7 @@ void remove_from_multi_timeout(timeout* t)
 
        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);
This page took 0.023129 seconds and 4 git commands to generate.