[glib] Take a reference on the gio file monitors while signaling pending file changes



commit d0d10e847f3ea347d651714050a8bafd5332e2cb
Author: Robert Bragg <robert linux intel com>
Date:   Wed May 6 09:20:43 2009 +0100

    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 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/gio/gfilemonitor.c b/gio/gfilemonitor.c
index 108e7a6..41444e3 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;
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]