[tracker] TrackerMiner: Cancel pending async calls on dispose.
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker] TrackerMiner: Cancel pending async calls on dispose.
- Date: Thu, 18 Feb 2010 15:20:18 +0000 (UTC)
commit 454ad32e4a7a2e3254541d09f3dbafab2d87f740
Author: Carlos Garnacho <carlos lanedo com>
Date: Thu Feb 18 16:11:29 2010 +0100
TrackerMiner: Cancel pending async calls on dispose.
GSimpleAsyncResult tries to reference the object (the miner in this
case), so it likely crashed when trying to ref an object being
destroyed. Instead do it on dispose, when the object is still alive,
but about to be destroyed.
src/libtracker-miner/tracker-miner.c | 18 +++++++++++++-----
src/tracker-miner-fs/tracker-main.c | 9 ++++++++-
2 files changed, 21 insertions(+), 6 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-miner.c b/src/libtracker-miner/tracker-miner.c
index 4d7e95e..f5f360d 100644
--- a/src/libtracker-miner/tracker-miner.c
+++ b/src/libtracker-miner/tracker-miner.c
@@ -118,6 +118,7 @@ static void miner_get_property (GObject *object,
GValue *value,
GParamSpec *pspec);
static void miner_finalize (GObject *object);
+static void miner_dispose (GObject *object);
static void miner_constructed (GObject *object);
static void dbus_data_destroy (gpointer data);
static DBusData * dbus_data_new (TrackerMiner *miner,
@@ -144,6 +145,7 @@ tracker_miner_class_init (TrackerMinerClass *klass)
object_class->get_property = miner_get_property;
object_class->finalize = miner_finalize;
object_class->constructed = miner_constructed;
+ object_class->dispose = miner_dispose;
/**
* TrackerMiner::started:
@@ -400,7 +402,17 @@ async_call_finalize_foreach (AsyncCallData *data,
gpointer user_data)
{
async_call_data_notify_error (data, 0, "Miner is being finalized");
- async_call_data_destroy (data, FALSE);
+ async_call_data_destroy (data, TRUE);
+}
+
+static void
+miner_dispose (GObject *object)
+{
+ TrackerMiner *miner = TRACKER_MINER (object);
+
+ g_ptr_array_foreach (miner->private->async_calls,
+ (GFunc) async_call_finalize_foreach,
+ object);
}
static void
@@ -420,10 +432,6 @@ miner_finalize (GObject *object)
}
g_hash_table_unref (miner->private->pauses);
-
- g_ptr_array_foreach (miner->private->async_calls,
- (GFunc) async_call_finalize_foreach,
- object);
g_ptr_array_free (miner->private->async_calls, TRUE);
G_OBJECT_CLASS (tracker_miner_parent_class)->finalize (object);
diff --git a/src/tracker-miner-fs/tracker-main.c b/src/tracker-miner-fs/tracker-main.c
index a4576f6..83aea1e 100644
--- a/src/tracker-miner-fs/tracker-main.c
+++ b/src/tracker-miner-fs/tracker-main.c
@@ -224,6 +224,13 @@ miner_finished_cb (TrackerMinerFS *fs,
miner_handle_next ();
}
+static void
+finalize_miner (TrackerMiner *miner)
+{
+ g_object_run_dispose (G_OBJECT (miner));
+ g_object_unref (G_OBJECT (miner));
+}
+
int
main (gint argc, gchar *argv[])
{
@@ -372,7 +379,7 @@ main (gint argc, gchar *argv[])
tracker_thumbnailer_shutdown ();
- g_slist_foreach (miners, (GFunc) g_object_unref, NULL);
+ g_slist_foreach (miners, (GFunc) finalize_miner, NULL);
g_slist_free (miners);
tracker_dbus_shutdown ();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]