diff options
| author | Sebastien Bacher <seb128@ubuntu.com> | 2020-02-26 16:32:44 +0100 |
|---|---|---|
| committer | Sebastien Bacher <seb128@ubuntu.com> | 2020-02-26 16:32:44 +0100 |
| commit | 447eb1ee6c50e2cac4009e66add3c1d449822589 (patch) | |
| tree | 7bc7db8f5d7e12137e758ea03ebe5c1eb8b07a23 /libnm/nm-active-connection.c | |
| parent | 0b818c504ebbb9454b501c532be8603bf383e37a (diff) | |
| parent | 3cbb3d6ecfef1076fc757632ee8327935250afee (diff) | |
Merge remote-tracking branch 'salsa/debian/master' into ubuntu/master
Diffstat (limited to 'libnm/nm-active-connection.c')
| -rw-r--r-- | libnm/nm-active-connection.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/libnm/nm-active-connection.c b/libnm/nm-active-connection.c index aa8504e6..ade2edbe 100644 --- a/libnm/nm-active-connection.c +++ b/libnm/nm-active-connection.c @@ -425,6 +425,33 @@ _nm_active_connection_state_changed_commit (NMActiveConnection *self, _notify_event_state_changed, g_object_ref (self)); } +/*****************************************************************************/ + +static gboolean +is_ready (NMObject *nmobj) +{ + NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (nmobj); + + /* Usually, we don't want to expose our NMObject instances until they are fully initialized. + * For NMRemoteSetting this means to wait until GetSettings() returns. + * + * Note that most object types reference each other (directly or indirectly). E.g. the + * NMActiveConnection refers to the NMRemoteConnection and the NMDevice instance. So, + * we don't want to hide them too long, otherwise basically the entire set of objects + * will be hidden until they are all initialized. So, usually, when a NMObject references + * objects that are not yet initialized, that reference will just be NULL but the object + * will be considered ready already. + * + * For NMActiveConnection referencing a NMRemoteConnection don't do that. Here we wait for the + * NMRemoteConnection to be ready as well. This is somewhat arbitrary special casing, but + * the effect is that when nm_client_add_and_activate*() returns, the NMActiveConnection already + * references a initialized NMRemoteConnection. + */ + if (!nml_dbus_property_o_is_ready_fully (&priv->property_o[PROPERTY_O_IDX_CONNECTION])) + return FALSE; + + return NM_OBJECT_CLASS (nm_active_connection_parent_class)->is_ready (nmobj); +} /*****************************************************************************/ @@ -550,6 +577,8 @@ nm_active_connection_class_init (NMActiveConnectionClass *klass) object_class->get_property = get_property; object_class->finalize = finalize; + nm_object_class->is_ready = is_ready; + _NM_OBJECT_CLASS_INIT_PRIV_PTR_INDIRECT (nm_object_class, NMActiveConnection); _NM_OBJECT_CLASS_INIT_PROPERTY_O_FIELDS_N (nm_object_class, NMActiveConnectionPrivate, property_o); |