aboutsummaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2012-09-28 08:41:44 +0200
committerAleksander Morgado <aleksander@lanedo.com>2012-09-28 08:42:13 +0200
commit65c3976cad2ed5ee14b979270b73d5c2a93ed215 (patch)
treef75b7e6660898d4542bb37eaa648bc92a567e982 /src/main.c
parent0b059ea9c9b894c470da0a3dc795ba7bc2b46cfd (diff)
core: acquire DBus name only after having created the `MMManager'
The `MMManager' is itself also a `GDBusObjectManagerServer'. If we create this object after having fully acquired the bus name, the client application in the other side of the bus could be trying to use the ObjectManager interface before we actually exported it, which is wrong. Therefore, we need to make sure that the Manager interfaces are all exported before the name is acquired.
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c51
1 files changed, 27 insertions, 24 deletions
diff --git a/src/main.c b/src/main.c
index bf5f27b5..431f54e1 100644
--- a/src/main.c
+++ b/src/main.c
@@ -66,13 +66,13 @@ setup_signals (void)
}
static void
-name_acquired_cb (GDBusConnection *connection,
- const gchar *name,
- gpointer user_data)
+bus_acquired_cb (GDBusConnection *connection,
+ const gchar *name,
+ gpointer user_data)
{
GError *error = NULL;
- mm_dbg ("Service name '%s' was acquired", name);
+ mm_dbg ("Bus acquired, creating manager...");
/* Create Manager object */
g_assert (!manager);
@@ -83,8 +83,17 @@ name_acquired_cb (GDBusConnection *connection,
g_main_loop_quit (loop);
return;
}
+}
+
+static void
+name_acquired_cb (GDBusConnection *connection,
+ const gchar *name,
+ gpointer user_data)
+{
+ mm_dbg ("Service name '%s' was acquired", name);
/* Launch scan for devices */
+ g_assert (manager);
mm_manager_start (manager);
}
@@ -95,14 +104,18 @@ name_lost_cb (GDBusConnection *connection,
{
/* Note that we're not allowing replacement, so once the name acquired, the
* process won't lose it. */
- mm_warn ("Could not acquire the '%s' service name", name);
+ if (!name)
+ mm_warn ("Could not get the system bus. Make sure "
+ "the message bus daemon is running!");
+ else
+ mm_warn ("Could not acquire the '%s' service name", name);
+
g_main_loop_quit (loop);
}
int
main (int argc, char *argv[])
{
- GDBusConnection *bus;
GError *err = NULL;
guint name_id;
@@ -126,24 +139,15 @@ main (int argc, char *argv[])
mm_info ("ModemManager (version " MM_DIST_VERSION ") starting...");
- /* Get system bus */
- bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &err);
- if (!bus) {
- g_warning ("Could not get the system bus. Make sure "
- "the message bus daemon is running! Message: %s",
- err->message);
- g_error_free (err);
- return -1;
- }
-
/* Acquire name, don't allow replacement */
- name_id = g_bus_own_name_on_connection (bus,
- MM_DBUS_SERVICE,
- G_BUS_NAME_OWNER_FLAGS_NONE,
- name_acquired_cb,
- name_lost_cb,
- NULL,
- NULL);
+ name_id = g_bus_own_name (G_BUS_TYPE_SYSTEM,
+ MM_DBUS_SERVICE,
+ G_BUS_NAME_OWNER_FLAGS_NONE,
+ bus_acquired_cb,
+ name_acquired_cb,
+ name_lost_cb,
+ NULL,
+ NULL);
/* Go into the main loop */
loop = g_main_loop_new (NULL, FALSE);
@@ -164,7 +168,6 @@ main (int argc, char *argv[])
}
g_bus_unown_name (name_id);
- g_object_unref (bus);
mm_log_shutdown ();