diff options
author | Sebastien Fabre <sebastien.fabre@sigfox.com> | 2018-11-20 14:24:16 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2018-11-29 07:55:16 +0100 |
commit | dc0cdbb57e646d9bcf33cdd2900355f19d8e68bf (patch) | |
tree | d0a460295d8f75e245c825304ca7b4de07e5d9b5 | |
parent | 15a2a291eaa323803598583dbacf763387be1621 (diff) | |
download | NetworkManager-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.c | 26 |
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; } |