summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2020-03-23 14:27:14 +0100
committerCarlos Garnacho <carlosg@gnome.org>2020-04-05 21:13:22 +0200
commit740b6dd6e825e9ae95befb6e230541e025822805 (patch)
tree754c996217949def022d346d546f4adb9995bd56
parent336316c26aaa530734fc3b1da3d475f6aa049ede (diff)
downloadtracker-740b6dd6e825e9ae95befb6e230541e025822805.tar.gz
libtracker-sparql: Cache service name along with the subscription
The signal callback will not contain the well-known name in the sender argument, but the internal bus name made up for the connection. Cache the service name along in the TrackerNotifierSubscription, so we can retrieve it in the callback without name lookups.
-rw-r--r--src/libtracker-sparql/tracker-notifier.c28
1 files changed, 16 insertions, 12 deletions
diff --git a/src/libtracker-sparql/tracker-notifier.c b/src/libtracker-sparql/tracker-notifier.c
index 14d6909b4..a74fc7062 100644
--- a/src/libtracker-sparql/tracker-notifier.c
+++ b/src/libtracker-sparql/tracker-notifier.c
@@ -78,6 +78,8 @@ typedef struct _TrackerNotifierEventCache TrackerNotifierEventCache;
struct _TrackerNotifierSubscription {
GDBusConnection *connection;
+ TrackerNotifier *notifier;
+ gchar *service;
guint handler_id;
};
@@ -120,14 +122,16 @@ G_DEFINE_TYPE_WITH_CODE (TrackerNotifier, tracker_notifier, G_TYPE_OBJECT,
G_ADD_PRIVATE (TrackerNotifier))
static TrackerNotifierSubscription *
-tracker_notifier_subscription_new (GDBusConnection *connection,
- guint handler_id)
+tracker_notifier_subscription_new (TrackerNotifier *notifier,
+ GDBusConnection *connection,
+ const gchar *service)
{
TrackerNotifierSubscription *subscription;
subscription = g_new0 (TrackerNotifierSubscription, 1);
subscription->connection = g_object_ref (connection);
- subscription->handler_id = handler_id;
+ subscription->notifier = notifier;
+ subscription->service = g_strdup (service);
return subscription;
}
@@ -138,6 +142,7 @@ tracker_notifier_subscription_free (TrackerNotifierSubscription *subscription)
g_dbus_connection_signal_unsubscribe (subscription->connection,
subscription->handler_id);
g_object_unref (subscription->connection);
+ g_free (subscription->service);
g_free (subscription);
}
@@ -463,7 +468,8 @@ graph_updated_cb (GDBusConnection *connection,
GVariant *parameters,
gpointer user_data)
{
- TrackerNotifier *notifier = user_data;
+ TrackerNotifierSubscription *subscription = user_data;
+ TrackerNotifier *notifier = subscription->notifier;
TrackerNotifierEventCache *cache;
GVariantIter *events;
const gchar *graph;
@@ -471,8 +477,8 @@ graph_updated_cb (GDBusConnection *connection,
g_variant_get (parameters, "(sa{ii})", &graph, &events);
- service = g_strdup_printf ("dbus:%s", sender_name);
- cache = _tracker_notifier_event_cache_new (notifier, sender_name, graph);
+ service = g_strdup_printf ("dbus:%s", subscription->service);
+ cache = _tracker_notifier_event_cache_new (notifier, service, graph);
g_free (service);
handle_events (notifier, cache, events);
@@ -622,7 +628,6 @@ tracker_notifier_signal_subscribe (TrackerNotifier *notifier,
{
TrackerNotifierSubscription *subscription;
TrackerNotifierPrivate *priv;
- guint handler_id;
g_return_val_if_fail (TRACKER_IS_NOTIFIER (notifier), 0);
g_return_val_if_fail (G_IS_DBUS_CONNECTION (connection), 0);
@@ -630,7 +635,8 @@ tracker_notifier_signal_subscribe (TrackerNotifier *notifier,
priv = tracker_notifier_get_instance_private (notifier);
- handler_id =
+ subscription = tracker_notifier_subscription_new (notifier, connection, service);
+ subscription->handler_id =
g_dbus_connection_signal_subscribe (connection,
service,
"org.freedesktop.Tracker3.Endpoint",
@@ -639,15 +645,13 @@ tracker_notifier_signal_subscribe (TrackerNotifier *notifier,
graph,
G_DBUS_SIGNAL_FLAGS_NONE,
graph_updated_cb,
- notifier, NULL);
-
- subscription = tracker_notifier_subscription_new (connection, handler_id);
+ subscription, NULL);
g_hash_table_insert (priv->subscriptions,
GUINT_TO_POINTER (subscription->handler_id),
subscription);
- return handler_id;
+ return subscription->handler_id;
}
void