X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Futil%2Ftimer.c;h=9f7ca0d65c85713e9d951e7facf4cd14eefef65d;hb=caa0f8fbb901def18eab94a2e7f0131705967c5e;hp=1dd2f11c36cb844286c0ac04603f47e4d75fc2cd;hpb=e050df33d29de6f7890b7111f6ea871aa5247743;p=chaz%2Ftint2 diff --git a/src/util/timer.c b/src/util/timer.c index 1dd2f11..9f7ca0d 100644 --- a/src/util/timer.c +++ b/src/util/timer.c @@ -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);