From cc23e0449ac7795aeef0c1956129db5f866440ee Mon Sep 17 00:00:00 2001 From: "Zeeshan Ali (Khattak)" Date: Wed, 1 Apr 2015 18:24:32 +0100 Subject: [PATCH] service-client: Delay unrefing ServiceLocation Lets try to ensure that apps are not still accessing the last location before unrefing (and therefore destroying) it by delaying the unref operation by 5 seconds after a ServiceLocation object becomes obsolete. https://bugs.freedesktop.org/show_bug.cgi?id=89782 --- src/gclue-service-client.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/gclue-service-client.c b/src/gclue-service-client.c index fa00da6..3d73e71 100644 --- a/src/gclue-service-client.c +++ b/src/gclue-service-client.c @@ -138,6 +138,14 @@ below_threshold (GClueServiceClient *client, return FALSE; } +static gboolean +on_prev_location_timeout (gpointer user_data) +{ + g_object_unref (user_data); + + return FALSE; +} + static void on_locator_location_changed (GObject *gobject, GParamSpec *pspec, @@ -163,7 +171,10 @@ on_locator_location_changed (GObject *gobject, return; } - g_clear_object (&priv->prev_location); + if (priv->prev_location != NULL) + // Lets try to ensure that apps are not still accessing the + // last location before unrefing (and therefore destroying) it. + g_timeout_add_seconds (5, on_prev_location_timeout, priv->prev_location); priv->prev_location = priv->location; path = next_location_path (client); -- 2.1.0