From 8765cbb0bf77d3718624a7d12cc8d7daea97da80 Mon Sep 17 00:00:00 2001 From: Martyn Russell Date: Mon, 10 Mar 2014 11:13:02 +0000 Subject: all: Make GBusType configurable with TRACKER_BUS_TYPE This works by using G_BUS_TYPE_SESSION if the env var TRACKER_BUS_TYPE is not set and will allow for "system" to be used as a value. If it is set, the system bus is used instead. --- examples/libtracker-sparql/class-signal.c | 4 +++- src/libtracker-bus/tracker-bus.vala | 2 +- src/libtracker-common/libtracker-common.vapi | 6 ++++++ src/libtracker-common/tracker-dbus.c | 15 ++++++++++++++- src/libtracker-common/tracker-dbus.h | 6 ++++++ src/libtracker-control/tracker-miner-manager.c | 4 ++-- src/libtracker-extract/tracker-extract-client.c | 6 ++++-- src/libtracker-miner/tracker-miner-object.c | 18 +++++++++--------- src/libtracker-miner/tracker-thumbnailer.c | 4 ++-- src/libtracker-sparql-backend/tracker-backend.vala | 17 ++++++++++++++++- src/miners/fs/tracker-main.c | 3 ++- src/miners/fs/tracker-miner-files-index.c | 2 +- src/miners/fs/tracker-miner-files.c | 3 ++- src/miners/fs/tracker-writeback-dispatcher.c | 2 +- src/miners/fs/tracker-writeback-listener.c | 2 +- src/miners/rss/tracker-miner-rss.c | 2 +- src/plugins/evolution/tracker-evolution-plugin.c | 2 +- src/tracker-control/tracker-control-general.c | 4 ++-- src/tracker-control/tracker-control-status.c | 2 +- src/tracker-extract/tracker-extract-decorator.c | 2 +- src/tracker-needle/tracker-stats.vala | 2 +- src/tracker-store/tracker-dbus.vala | 2 +- src/tracker-writeback/tracker-writeback.c | 2 +- 23 files changed, 79 insertions(+), 33 deletions(-) diff --git a/examples/libtracker-sparql/class-signal.c b/examples/libtracker-sparql/class-signal.c index 3ba2ab3f4..02a828787 100644 --- a/examples/libtracker-sparql/class-signal.c +++ b/examples/libtracker-sparql/class-signal.c @@ -19,6 +19,8 @@ #include +#include + #include static TrackerSparqlConnection *con; @@ -87,7 +89,7 @@ main (gint argc, gchar *argv[]) loop = g_main_loop_new (NULL, FALSE); con = tracker_sparql_connection_get (NULL, &error); - connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL); + connection = g_bus_get_sync (TRACKER_IPC_BUS, NULL, NULL); signal_id = g_dbus_connection_signal_subscribe (connection, TRACKER_DBUS_SERVICE, diff --git a/src/libtracker-bus/tracker-bus.vala b/src/libtracker-bus/tracker-bus.vala index 17763d1d7..4a58dd964 100644 --- a/src/libtracker-bus/tracker-bus.vala +++ b/src/libtracker-bus/tracker-bus.vala @@ -21,7 +21,7 @@ public class Tracker.Bus.Connection : Tracker.Sparql.Connection { DBusConnection bus; public Connection () throws Sparql.Error, IOError, DBusError { - bus = GLib.Bus.get_sync (BusType.SESSION); + bus = GLib.Bus.get_sync (Tracker.IPC.bus ()); // ensure that error domain is registered with GDBus new Sparql.Error.INTERNAL (""); diff --git a/src/libtracker-common/libtracker-common.vapi b/src/libtracker-common/libtracker-common.vapi index 0475fbe5b..50506e6e4 100644 --- a/src/libtracker-common/libtracker-common.vapi +++ b/src/libtracker-common/libtracker-common.vapi @@ -70,6 +70,12 @@ namespace Tracker { public void init (); } + [Compact] + [CCode (cheader_filename = "libtracker-common/tracker-common.h")] + namespace IPC { + public GLib.BusType bus (); + } + [Compact] [CCode (ref_function = "", unref_function = "", cheader_filename = "libtracker-common/tracker-common.h")] public class DBusRequest { diff --git a/src/libtracker-common/tracker-dbus.c b/src/libtracker-common/tracker-dbus.c index 53da8e782..06b487125 100644 --- a/src/libtracker-common/tracker-dbus.c +++ b/src/libtracker-common/tracker-dbus.c @@ -63,11 +63,24 @@ static GDBusConnection *connection; static void client_data_free (gpointer data); static gboolean client_clean_up_cb (gpointer data); +inline GBusType +tracker_ipc_bus (void) +{ + const gchar *bus = g_getenv ("TRACKER_BUS_TYPE"); + + if (G_UNLIKELY (bus != NULL && + g_ascii_strcasecmp (bus, "system") == 0)) { + return G_BUS_TYPE_SYSTEM; + } + + return G_BUS_TYPE_SESSION; +} + static gboolean clients_init (void) { GError *error = NULL; - connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error); + connection = g_bus_get_sync (TRACKER_IPC_BUS, NULL, &error); if (error) { g_critical ("Could not connect to the D-Bus session bus, %s", diff --git a/src/libtracker-common/tracker-dbus.h b/src/libtracker-common/tracker-dbus.h index e7c479fd3..6ea5bb888 100644 --- a/src/libtracker-common/tracker-dbus.h +++ b/src/libtracker-common/tracker-dbus.h @@ -28,6 +28,9 @@ G_BEGIN_DECLS #error "only must be included directly." #endif +/* Allow bus type override by env var TRACKER_BUS_TYPE */ +#define TRACKER_IPC_BUS tracker_ipc_bus() + #define TRACKER_DBUS_ERROR_DOMAIN "TrackerDBus" #define TRACKER_DBUS_ERROR tracker_dbus_error_quark() @@ -63,6 +66,9 @@ typedef enum { TRACKER_DBUS_ERROR_BROKEN_PIPE } TrackerDBusError; + +GBusType tracker_ipc_bus (void); + GQuark tracker_dbus_error_quark (void); /* Utils */ diff --git a/src/libtracker-control/tracker-miner-manager.c b/src/libtracker-control/tracker-miner-manager.c index 595c90aa3..a2b344e70 100644 --- a/src/libtracker-control/tracker-miner-manager.c +++ b/src/libtracker-control/tracker-miner-manager.c @@ -404,7 +404,7 @@ miner_manager_initable_init (GInitable *initable, manager = TRACKER_MINER_MANAGER (initable); priv = TRACKER_MINER_MANAGER_GET_PRIVATE (manager); - priv->connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &inner_error); + priv->connection = g_bus_get_sync (TRACKER_IPC_BUS, NULL, &inner_error); if (!priv->connection) { g_propagate_error (error, inner_error); return FALSE; @@ -475,7 +475,7 @@ miner_manager_initable_init (GInitable *initable, g_hash_table_insert (priv->miner_proxies, proxy, g_strdup (data->dbus_name)); - data->watch_name_id = g_bus_watch_name (G_BUS_TYPE_SESSION, + data->watch_name_id = g_bus_watch_name (TRACKER_IPC_BUS, data->dbus_name, G_BUS_NAME_WATCHER_FLAGS_NONE, miner_appears, diff --git a/src/libtracker-extract/tracker-extract-client.c b/src/libtracker-extract/tracker-extract-client.c index 200fa40c3..2bcba929a 100644 --- a/src/libtracker-extract/tracker-extract-client.c +++ b/src/libtracker-extract/tracker-extract-client.c @@ -26,6 +26,8 @@ #include #include +#include + #include "tracker-extract-client.h" /* Size of buffers used when sending data over a pipe, using DBus FD passing */ @@ -494,7 +496,7 @@ tracker_extract_client_get_metadata (GFile *file, g_return_if_fail (callback != NULL); if (G_UNLIKELY (!connection)) { - connection = g_bus_get_sync (G_BUS_TYPE_SESSION, cancellable, &error); + connection = g_bus_get_sync (TRACKER_IPC_BUS, cancellable, &error); if (error) { g_simple_async_report_gerror_in_idle (G_OBJECT (file), callback, user_data, error); @@ -556,7 +558,7 @@ tracker_extract_client_cancel_for_prefix (GFile *prefix) if (G_UNLIKELY (!connection)) { GError *error = NULL; - connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error); + connection = g_bus_get_sync (TRACKER_IPC_BUS, NULL, &error); if (error) { g_warning ("Couldn't get session bus, cannot cancel extractor tasks: '%s'", error->message); diff --git a/src/libtracker-miner/tracker-miner-object.c b/src/libtracker-miner/tracker-miner-object.c index 9b460d4c4..88898876e 100644 --- a/src/libtracker-miner/tracker-miner-object.c +++ b/src/libtracker-miner/tracker-miner-object.c @@ -411,7 +411,7 @@ miner_initable_init (GInitable *initable, } /* Try to get DBus connection... */ - miner->priv->d_connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &inner_error); + miner->priv->d_connection = g_bus_get_sync (TRACKER_IPC_BUS, NULL, &inner_error); if (!miner->priv->d_connection) { g_propagate_error (error, inner_error); return FALSE; @@ -496,13 +496,13 @@ miner_initable_init (GInitable *initable, return FALSE; } - miner->priv->watch_name_id = g_bus_watch_name (G_BUS_TYPE_SESSION, - TRACKER_SERVICE, - G_BUS_NAME_WATCHER_FLAGS_NONE, - on_tracker_store_appeared, - on_tracker_store_disappeared, - miner, - NULL); + miner->priv->watch_name_id = g_bus_watch_name (TRACKER_IPC_BUS, + TRACKER_SERVICE, + G_BUS_NAME_WATCHER_FLAGS_NONE, + on_tracker_store_appeared, + on_tracker_store_disappeared, + miner, + NULL); return TRUE; } @@ -961,7 +961,7 @@ miner_pause_internal (TrackerMiner *miner, if (calling_name) { g_message ("Watching process with name:'%s'", calling_name); - watch_name_id = g_bus_watch_name (G_BUS_TYPE_SESSION, + watch_name_id = g_bus_watch_name (TRACKER_IPC_BUS, calling_name, G_BUS_NAME_WATCHER_FLAGS_NONE, NULL, diff --git a/src/libtracker-miner/tracker-thumbnailer.c b/src/libtracker-miner/tracker-thumbnailer.c index 58fc76ae8..2af4d8bb0 100644 --- a/src/libtracker-miner/tracker-thumbnailer.c +++ b/src/libtracker-miner/tracker-thumbnailer.c @@ -142,9 +142,9 @@ tracker_thumbnailer_initable_init (GInitable *initable, private->request_id = 1; private->service_is_available = FALSE; - g_message ("Thumbnailer connections being set up..."); + g_message ("Thumbnailer connections being set up... (using same bus as Tracker, i.e. session or system)"); - private->connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, error); + private->connection = g_bus_get_sync (TRACKER_IPC_BUS, NULL, error); if (!private->connection) return FALSE; diff --git a/src/libtracker-sparql-backend/tracker-backend.vala b/src/libtracker-sparql-backend/tracker-backend.vala index e9a187da4..e4e548809 100644 --- a/src/libtracker-sparql-backend/tracker-backend.vala +++ b/src/libtracker-sparql-backend/tracker-backend.vala @@ -26,6 +26,7 @@ class Tracker.Sparql.Backend : Connection { DIRECT, BUS } + GLib.BusType bus_type = BusType.SESSION; public Backend () throws Sparql.Error, IOError, DBusError, SpawnError { try { @@ -34,7 +35,7 @@ class Tracker.Sparql.Backend : Connection { // do not use proxy to work around race condition in GDBus // NB#259760 - var bus = GLib.Bus.get_sync (BusType.SESSION); + var bus = GLib.Bus.get_sync (bus_type); var msg = new DBusMessage.method_call (TRACKER_DBUS_SERVICE, TRACKER_DBUS_OBJECT_STATUS, TRACKER_DBUS_INTERFACE_STATUS, "Wait"); bus.send_message_with_reply_sync (msg, 0, /* timeout */ int.MAX, null).to_gerror (); @@ -164,6 +165,20 @@ class Tracker.Sparql.Backend : Connection { // Plugin loading functions private void load_plugins () throws GLib.Error { + string env_bus_type = Environment.get_variable ("TRACKER_BUS_TYPE"); + + if (env_bus_type != null) { + if (env_bus_type.ascii_casecmp ("system") == 0) { + bus_type = BusType.SYSTEM; + debug ("Using bus = 'SYSTEM'"); + } else if (env_bus_type.ascii_casecmp ("session") == 0) { + bus_type = BusType.SESSION; + debug ("Using bus = 'SESSION'"); + } else { + warning ("Environment variable TRACKER_BUS_TYPE set to unknown value '%s'", env_bus_type); + } + } + string env_backend = Environment.get_variable ("TRACKER_SPARQL_BACKEND"); Backend backend = Backend.AUTO; diff --git a/src/miners/fs/tracker-main.c b/src/miners/fs/tracker-main.c index 120404452..6c7752c7a 100644 --- a/src/miners/fs/tracker-main.c +++ b/src/miners/fs/tracker-main.c @@ -31,6 +31,7 @@ #include #include +#include #include #include #include @@ -768,7 +769,7 @@ store_is_available (void) GDBusProxy *proxy; gchar *name_owner; - connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL); + connection = g_bus_get_sync (TRACKER_IPC_BUS, NULL, NULL); if (!connection) { return FALSE; diff --git a/src/miners/fs/tracker-miner-files-index.c b/src/miners/fs/tracker-miner-files-index.c index 7b6a67d7c..d5239b26a 100644 --- a/src/miners/fs/tracker-miner-files-index.c +++ b/src/miners/fs/tracker-miner-files-index.c @@ -453,7 +453,7 @@ tracker_miner_files_index_new (TrackerMinerFiles *miner_files) priv = TRACKER_MINER_FILES_INDEX_GET_PRIVATE (miner); - priv->d_connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error); + priv->d_connection = g_bus_get_sync (TRACKER_IPC_BUS, NULL, &error); if (!priv->d_connection) { g_critical ("Could not connect to the D-Bus session bus, %s", diff --git a/src/miners/fs/tracker-miner-files.c b/src/miners/fs/tracker-miner-files.c index c0904cf17..48ac10348 100644 --- a/src/miners/fs/tracker-miner-files.c +++ b/src/miners/fs/tracker-miner-files.c @@ -34,6 +34,7 @@ #include #include +#include #include #include #include @@ -313,7 +314,7 @@ miner_files_initable_init (GInitable *initable, } /* Set up extractor and signals */ - mf->private->connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &inner_error); + mf->private->connection = g_bus_get_sync (TRACKER_IPC_BUS, NULL, &inner_error); if (!mf->private->connection) { g_propagate_error (error, inner_error); g_prefix_error (error, diff --git a/src/miners/fs/tracker-writeback-dispatcher.c b/src/miners/fs/tracker-writeback-dispatcher.c index 7f7400d10..4d6d54b95 100644 --- a/src/miners/fs/tracker-writeback-dispatcher.c +++ b/src/miners/fs/tracker-writeback-dispatcher.c @@ -193,7 +193,7 @@ writeback_dispatcher_initable_init (GInitable *initable, return FALSE; } - priv->d_connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &internal_error); + priv->d_connection = g_bus_get_sync (TRACKER_IPC_BUS, NULL, &internal_error); if (internal_error) { g_propagate_error (error, internal_error); diff --git a/src/miners/fs/tracker-writeback-listener.c b/src/miners/fs/tracker-writeback-listener.c index 0ccec24e7..e37ad993a 100644 --- a/src/miners/fs/tracker-writeback-listener.c +++ b/src/miners/fs/tracker-writeback-listener.c @@ -190,7 +190,7 @@ writeback_listener_initable_init (GInitable *initable, return FALSE; } - priv->d_connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &internal_error); + priv->d_connection = g_bus_get_sync (TRACKER_IPC_BUS, NULL, &internal_error); if (internal_error) { g_propagate_error (error, internal_error); diff --git a/src/miners/rss/tracker-miner-rss.c b/src/miners/rss/tracker-miner-rss.c index 089ebf260..6b261312b 100644 --- a/src/miners/rss/tracker-miner-rss.c +++ b/src/miners/rss/tracker-miner-rss.c @@ -145,7 +145,7 @@ tracker_miner_rss_init (TrackerMinerRSS *object) priv = TRACKER_MINER_RSS_GET_PRIVATE (object); - priv->connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error); + priv->connection = g_bus_get_sync (TRACKER_BUS_TYPE, NULL, &error); if (!priv->connection) { g_critical ("Could not connect to the D-Bus session bus, %s", diff --git a/src/plugins/evolution/tracker-evolution-plugin.c b/src/plugins/evolution/tracker-evolution-plugin.c index db93c05ed..a5b3beebb 100644 --- a/src/plugins/evolution/tracker-evolution-plugin.c +++ b/src/plugins/evolution/tracker-evolution-plugin.c @@ -2492,7 +2492,7 @@ miner_start_watching (TrackerMiner *miner) { TrackerMinerEvolutionPrivate *priv = TRACKER_MINER_EVOLUTION_GET_PRIVATE (miner); - priv->watch_name_id = g_bus_watch_name (G_BUS_TYPE_SESSION, + priv->watch_name_id = g_bus_watch_name (TRACKER_BUS_TYPE, TRACKER_SERVICE, G_BUS_NAME_WATCHER_FLAGS_NONE, on_tracker_store_appeared, diff --git a/src/tracker-control/tracker-control-general.c b/src/tracker-control/tracker-control-general.c index 7304c7748..5e33cf5b3 100644 --- a/src/tracker-control/tracker-control-general.c +++ b/src/tracker-control/tracker-control-general.c @@ -1262,7 +1262,7 @@ tracker_control_general_run (void) g_print ("%s\n", _("Backing up database")); g_print (" %s\n", uri); - connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error); + connection = g_bus_get_sync (TRACKER_IPC_BUS, NULL, &error); if (!connection) { g_critical ("Could not connect to the D-Bus session bus: %s", @@ -1334,7 +1334,7 @@ tracker_control_general_run (void) g_print ("%s\n", _("Restoring database from backup")); g_print (" %s\n", uri); - connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error); + connection = g_bus_get_sync (TRACKER_IPC_BUS, NULL, &error); if (!connection) { g_critical ("Could not connect to the D-Bus session bus: %s", diff --git a/src/tracker-control/tracker-control-status.c b/src/tracker-control/tracker-control-status.c index bbf322762..1fa93af41 100644 --- a/src/tracker-control/tracker-control-status.c +++ b/src/tracker-control/tracker-control-status.c @@ -459,7 +459,7 @@ store_init (void) return TRUE; } - connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error); + connection = g_bus_get_sync (TRACKER_IPC_BUS, NULL, &error); if (!connection) { g_critical ("Could not connect to the D-Bus session bus, %s", diff --git a/src/tracker-extract/tracker-extract-decorator.c b/src/tracker-extract/tracker-extract-decorator.c index 689114018..9df4aff88 100644 --- a/src/tracker-extract/tracker-extract-decorator.c +++ b/src/tracker-extract/tracker-extract-decorator.c @@ -556,7 +556,7 @@ tracker_extract_decorator_initable_init (GInitable *initable, tracker_extract_dbus_priority_set_supported_rdf_types (priv->iface, supported_classes); - conn = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, error); + conn = g_bus_get_sync (TRACKER_IPC_BUS, NULL, error); if (conn == NULL) { ret = FALSE; goto out; diff --git a/src/tracker-needle/tracker-stats.vala b/src/tracker-needle/tracker-stats.vala index ffe930d7b..dfb07c4c7 100644 --- a/src/tracker-needle/tracker-stats.vala +++ b/src/tracker-needle/tracker-stats.vala @@ -43,7 +43,7 @@ public class Tracker.Stats : Dialog { debug ("Setting up statistics D-Bus connection"); try { - tracker = GLib.Bus.get_proxy_sync (BusType.SESSION, + tracker = GLib.Bus.get_proxy_sync (Tracker.Bus.type (), "org.freedesktop.Tracker1", "/org/freedesktop/Tracker1/Statistics", DBusProxyFlags.DO_NOT_LOAD_PROPERTIES | DBusProxyFlags.DO_NOT_CONNECT_SIGNALS); diff --git a/src/tracker-store/tracker-dbus.vala b/src/tracker-store/tracker-dbus.vala index 96aed5fea..bdfae4b3b 100644 --- a/src/tracker-store/tracker-dbus.vala +++ b/src/tracker-store/tracker-dbus.vala @@ -94,7 +94,7 @@ public class Tracker.DBus { } try { - connection = Bus.get_sync (BusType.SESSION); + connection = GLib.Bus.get_sync (Tracker.IPC.bus ()); } catch (Error e) { critical ("Could not connect to the D-Bus session bus, %s", e.message); return false; diff --git a/src/tracker-writeback/tracker-writeback.c b/src/tracker-writeback/tracker-writeback.c index 7435b0fbe..faf057b6f 100644 --- a/src/tracker-writeback/tracker-writeback.c +++ b/src/tracker-writeback/tracker-writeback.c @@ -728,7 +728,7 @@ tracker_controller_dbus_start (TrackerController *controller, return FALSE; } - priv->d_connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &err); + priv->d_connection = g_bus_get_sync (TRACKER_IPC_BUS, NULL, &err); if (!priv->d_connection) { g_propagate_error (error, err); -- cgit v1.2.1