[tracker] libtracker-miner: Fix Invalid memory reads on writeback finalization



commit 53637578078afd1e52187f2a9252cf63aff9a172
Author: Carlos Garnacho <carlosg gnome org>
Date:   Sun Jan 17 19:00:16 2016 +0100

    libtracker-miner: Fix Invalid memory reads on writeback finalization
    
    We connect the signal through g_signal_connect_object() which has the
    feature of disconnecting automatically the signal when the given
    gobject is finalized. Doing it again ourselves in finalize ends up
    in invalid reads, we can avoid doing this altogether.

 src/miners/fs/tracker-writeback-dispatcher.c |   15 +++++----------
 1 files changed, 5 insertions(+), 10 deletions(-)
---
diff --git a/src/miners/fs/tracker-writeback-dispatcher.c b/src/miners/fs/tracker-writeback-dispatcher.c
index 1d0c5fb..60765da 100644
--- a/src/miners/fs/tracker-writeback-dispatcher.c
+++ b/src/miners/fs/tracker-writeback-dispatcher.c
@@ -45,7 +45,6 @@ typedef struct {
        TrackerMinerFiles *files_miner;
        GDBusConnection *d_connection;
        TrackerSparqlConnection *connection;
-       gulong signal_id;
 } TrackerWritebackDispatcherPrivate;
 
 enum {
@@ -154,10 +153,6 @@ writeback_dispatcher_finalize (GObject *object)
 {
        TrackerWritebackDispatcherPrivate *priv = TRACKER_WRITEBACK_DISPATCHER_GET_PRIVATE (object);
 
-       if (priv->signal_id != 0 && g_signal_handler_is_connected (object, priv->signal_id)) {
-               g_signal_handler_disconnect (object, priv->signal_id);
-       }
-
        if (priv->connection) {
                g_object_unref (priv->connection);
        }
@@ -200,11 +195,11 @@ writeback_dispatcher_initable_init (GInitable    *initable,
                return FALSE;
        }
 
-       priv->signal_id = g_signal_connect_object (priv->files_miner,
-                                                  "writeback-file",
-                                                  G_CALLBACK (writeback_dispatcher_writeback_file),
-                                                  initable,
-                                                  G_CONNECT_AFTER);
+       g_signal_connect_object (priv->files_miner,
+                                "writeback-file",
+                                G_CALLBACK (writeback_dispatcher_writeback_file),
+                                initable,
+                                G_CONNECT_AFTER);
 
        return TRUE;
 }


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