X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Ftint2;a=blobdiff_plain;f=src%2Futil%2Ftimer.c;h=9f7ca0d65c85713e9d951e7facf4cd14eefef65d;hp=b4db7f48dfa0915eec9692bbece3937781d4d63f;hb=caa0f8fbb901def18eab94a2e7f0131705967c5e;hpb=43df01880e106d710ea57a2025db17f7d7db74fa diff --git a/src/util/timer.c b/src/util/timer.c index b4db7f4..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() { @@ -62,24 +77,12 @@ void cleanup_timeout() 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, @@ -395,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);