summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastien Fabre <sebastien.fabre@sigfox.com>2018-11-20 14:24:16 +0100
committerThomas Haller <thaller@redhat.com>2018-11-29 07:55:16 +0100
commitdc0cdbb57e646d9bcf33cdd2900355f19d8e68bf (patch)
treed0a460295d8f75e245c825304ca7b4de07e5d9b5
parent15a2a291eaa323803598583dbacf763387be1621 (diff)
downloadNetworkManager-dc0cdbb57e646d9bcf33cdd2900355f19d8e68bf.tar.gz
dbus: register object manager object before requesting dbus name
Working on NetworkManager 1.12.4 and sometimes (rarely), when creating a NM client object before NetworkManager service start, this object will never be running. In that case, we can see the following log: "[GLIB-GLib-GIO WARN] Error calling GetManagedObjects() when name owner :1.5 for name org.freedesktop.NetworkManager came back: GDBus.Error:org.freedesktop.DBus.Error.UnknownMethod: No such interface 'org.freedesktop.DBus.ObjectManager' on object at path /org/freedesktop". Object Manager object shall be registered before requesting dbus name to be sure that 'org.freedesktop.Dbus.ObjectManager' interface is present when name owner change is received by libnm. https://gitlab.freedesktop.org/NetworkManager/NetworkManager/merge_requests/51
-rw-r--r--src/nm-dbus-manager.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/src/nm-dbus-manager.c b/src/nm-dbus-manager.c
index 17fc24af84..3d45fc665a 100644
--- a/src/nm-dbus-manager.c
+++ b/src/nm-dbus-manager.c
@@ -1538,6 +1538,18 @@ nm_dbus_manager_acquire_bus (NMDBusManager *self)
return FALSE;
}
+ registration_id = g_dbus_connection_register_object (connection,
+ OBJECT_MANAGER_SERVER_BASE_PATH,
+ NM_UNCONST_PTR (GDBusInterfaceInfo, &interface_info_objmgr),
+ &dbus_vtable_objmgr,
+ self,
+ NULL,
+ &error);
+ if (!registration_id) {
+ _LOGE ("failure to register object manager: %s", error->message);
+ return FALSE;
+ }
+
ret = _nm_dbus_proxy_call_sync (proxy,
"RequestName",
g_variant_new ("(su)",
@@ -1550,6 +1562,7 @@ nm_dbus_manager_acquire_bus (NMDBusManager *self)
if (!ret) {
_LOGE ("fatal failure to acquire D-Bus service \"%s"": %s",
NM_DBUS_SERVICE, error->message);
+ g_dbus_connection_unregister_object(connection, registration_id);
return FALSE;
}
@@ -1557,18 +1570,7 @@ nm_dbus_manager_acquire_bus (NMDBusManager *self)
if (result != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) {
_LOGE ("fatal failure to acquire D-Bus service \"%s\" (%u). Service already taken",
NM_DBUS_SERVICE, (guint) result);
- return FALSE;
- }
-
- registration_id = g_dbus_connection_register_object (connection,
- OBJECT_MANAGER_SERVER_BASE_PATH,
- NM_UNCONST_PTR (GDBusInterfaceInfo, &interface_info_objmgr),
- &dbus_vtable_objmgr,
- self,
- NULL,
- &error);
- if (!registration_id) {
- _LOGE ("failure to register object manager: %s", error->message);
+ g_dbus_connection_unregister_object(connection, registration_id);
return FALSE;
}