From c2ed17a1a712cb446d8e62d9697bffa0cdf1a585 Mon Sep 17 00:00:00 2001 From: Robert Bragg Date: Wed, 6 May 2009 09:20:43 +0100 Subject: [PATCH] Take a reference on the gio file monitors while signaling pending file changes It was possible for a signal handler to remove the last reference and dispose the monitor. If there were remaining pending_file_changes they tried to dereference the disposed monitor. This patch simply calls g_object_{ref,unref} around the loop that signals the changes. --- gio/gfilemonitor.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gio/gfilemonitor.c b/gio/gfilemonitor.c index 108e7a6c4..41444e360 100644 --- a/gio/gfilemonitor.c +++ b/gio/gfilemonitor.c @@ -364,6 +364,7 @@ emit_cb (gpointer data) monitor->priv->pending_file_changes = NULL; monitor->priv->pending_file_change_id = 0; + g_object_ref (monitor); for (iter = pending; iter; iter = iter->next) { FileChange *change = iter->data; @@ -372,6 +373,8 @@ emit_cb (gpointer data) file_change_free (change); } g_slist_free (pending); + g_object_unref (monitor); + return FALSE; }