diff --git a/src/shared/timeout-glib.c b/src/shared/timeout-glib.c
index c045efc..4163bce 100644
--- a/src/shared/timeout-glib.c
+++ b/src/shared/timeout-glib.c
g_free(data);
}
-int timeout_add(unsigned int ms, timeout_func_t func, void *user_data,
- timeout_destroy_func_t destroy)
+unsigned int timeout_add(unsigned int timeout, timeout_func_t func,
+ void *user_data, timeout_destroy_func_t destroy)
{
+ struct timeout_data *data;
guint id;
- struct timeout_data *data = g_malloc0(sizeof(*data));
+
+ data = g_try_new0(struct timeout_data, 1);
+ if (!data)
+ return 0;
data->func = func;
data->destroy = destroy;
data->user_data = user_data;
- id = g_timeout_add_full(G_PRIORITY_DEFAULT, ms, timeout_callback, data,
- timeout_destroy);
+ id = g_timeout_add_full(G_PRIORITY_DEFAULT, timeout, timeout_callback,
+ data, timeout_destroy);
if (!id)
g_free(data);
void timeout_remove(unsigned int id)
{
GSource *source = g_main_context_find_source_by_id(NULL, id);
+
if (source)
g_source_destroy(source);
}
diff --git a/src/shared/timeout-mainloop.c b/src/shared/timeout-mainloop.c
index bdc527a..a0d18b7 100644
--- a/src/shared/timeout-mainloop.c
+++ b/src/shared/timeout-mainloop.c
#include <stdlib.h>
-#include "timeout.h"
-
#include "monitor/mainloop.h"
+#include "util.h"
+#include "timeout.h"
+
struct timeout_data {
int id;
timeout_func_t func;
free(data);
}
-int timeout_add(unsigned int t, timeout_func_t func, void *user_data,
- timeout_destroy_func_t destroy)
+unsigned int timeout_add(unsigned int timeout, timeout_func_t func,
+ void *user_data, timeout_destroy_func_t destroy)
{
- struct timeout_data *data = malloc(sizeof(*data));
+ struct timeout_data *data;
+
+ data = new0(struct timeout_data, 1);
+ if (!data)
+ return 0;
data->func = func;
data->user_data = user_data;
- data->timeout = t;
+ data->timeout = timeout;
- data->id = mainloop_add_timeout(t, timeout_callback, data,
+ data->id = mainloop_add_timeout(timeout, timeout_callback, data,
timeout_destroy);
if (!data->id) {
free(data);
return 0;
}
- return data->id;
+ return (unsigned int) data->id;
}
void timeout_remove(unsigned int id)
{
- if (id)
- mainloop_remove_timeout(id);
+ if (!id)
+ return;
+
+ mainloop_remove_timeout((int) id);
}
diff --git a/src/shared/timeout.h b/src/shared/timeout.h
index c13616f..4930ce1 100644
--- a/src/shared/timeout.h
+++ b/src/shared/timeout.h
typedef bool (*timeout_func_t)(void *user_data);
typedef void (*timeout_destroy_func_t)(void *user_data);
-int timeout_add(unsigned int msec, timeout_func_t func, void *user_data,
- timeout_destroy_func_t destroy);
+unsigned int timeout_add(unsigned int timeout, timeout_func_t func,
+ void *user_data, timeout_destroy_func_t destroy);
void timeout_remove(unsigned int id);