From 568e41db929a34106c8c2ff7c48716ab5c13ef49 Mon Sep 17 00:00:00 2001 From: Andrew Beekhof Date: Mon, 13 Oct 2014 13:30:58 +1100 Subject: [PATCH] Fix: lrmd: Prevent glib assert triggered by timers being removed from mainloop more than once --- lib/services/services.c | 3 +++ lib/services/services_linux.c | 1 + 2 files changed, 4 insertions(+) --- a/lib/services/services.c +++ b/lib/services/services.c @@ -313,6 +313,7 @@ services_action_free(svc_action_t * op) if (op->opaque->repeat_timer) { g_source_remove(op->opaque->repeat_timer); + op->opaque->repeat_timer = 0; } if (op->opaque->stderr_gsource) { mainloop_del_fd(op->opaque->stderr_gsource); @@ -425,6 +426,7 @@ services_action_kick(const char *name, c } else { if (op->opaque->repeat_timer) { g_source_remove(op->opaque->repeat_timer); + op->opaque->repeat_timer = 0; } recurring_action_timer(op); return TRUE; @@ -459,6 +461,7 @@ handle_duplicate_recurring(svc_action_t if (dup->pid != 0) { if (op->opaque->repeat_timer) { g_source_remove(op->opaque->repeat_timer); + op->opaque->repeat_timer = 0; } recurring_action_timer(dup); } --- a/lib/services/services_linux.c +++ b/lib/services/services_linux.c @@ -226,6 +226,7 @@ recurring_action_timer(gpointer data) op->stdout_data = NULL; free(op->stderr_data); op->stderr_data = NULL; + op->opaque->repeat_timer = 0; services_action_async(op, NULL); return FALSE;