summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2022-01-28 11:02:04 +0100
committerThomas Haller <thaller@redhat.com>2022-01-28 11:02:22 +0100
commit81cf70b0c12eb35a7e80399f191900ff1ee8a8cb (patch)
tree0715b666aae8d6e938dbdfd7192aa4fbc2dc16d2
parent9d60cd2813fc8f9f89e7c0904cc17336a39e4592 (diff)
parent039f0b280381aff4af1eaeb56f67854cd6212acc (diff)
downloadNetworkManager-81cf70b0c12eb35a7e80399f191900ff1ee8a8cb.tar.gz
libnm: merge branch 'th/libnm-dangling-property-2'
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1075
-rw-r--r--src/libnm-client-impl/nm-client.c14
-rw-r--r--src/libnm-client-impl/tests/test-nm-client.c4
2 files changed, 16 insertions, 2 deletions
diff --git a/src/libnm-client-impl/nm-client.c b/src/libnm-client-impl/nm-client.c
index 27382ec8b9..d27e4d5bc2 100644
--- a/src/libnm-client-impl/nm-client.c
+++ b/src/libnm-client-impl/nm-client.c
@@ -1335,6 +1335,8 @@ nml_dbus_object_obj_changed_link(NMClient *self,
nm_assert(NML_IS_DBUS_OBJECT(dbobj));
nm_assert(changed_type != NML_DBUS_OBJ_CHANGED_TYPE_NONE);
+ /* Links @dbobj in the "obj_changed_lst", with the new "changed_type". */
+
if (!NM_FLAGS_ALL((NMLDBusObjChangedType) dbobj->obj_changed_type, changed_type))
NML_NMCLIENT_LOG_T(self,
"[%s]: changed-type 0x%02x linked",
@@ -1372,6 +1374,12 @@ nml_dbus_object_obj_changed_consume(NMClient *self,
NMClientPrivate *priv;
NMLDBusObjChangedType changed_type_res;
+ /* We have @dbobj which has some "obj_changed_type" set (consequently,
+ * it's linked in the "obj_changed_lst"). Here we consume the @changed_type,
+ * meaning, to clear those flags from "obj_change_type" (and return
+ * the flags that were cleared/present or NONE, if the current object
+ * doesn't have these changed-types. */
+
nm_assert(NM_IS_CLIENT(self));
nm_assert(NML_IS_DBUS_OBJECT(dbobj));
nm_assert(changed_type != NML_DBUS_OBJ_CHANGED_TYPE_NONE);
@@ -1383,6 +1391,8 @@ nml_dbus_object_obj_changed_consume(NMClient *self,
dbobj->obj_changed_type &= ~changed_type;
if (dbobj->obj_changed_type == NML_DBUS_OBJ_CHANGED_TYPE_NONE) {
+ /* No other "obj_change_type" left. Unlink the object from the
+ * "changed_type_list". */
c_list_unlink(&dbobj->obj_changed_lst);
nm_assert(changed_type_res != NML_DBUS_OBJ_CHANGED_TYPE_NONE);
NML_NMCLIENT_LOG_T(self,
@@ -1394,6 +1404,9 @@ nml_dbus_object_obj_changed_consume(NMClient *self,
priv = NM_CLIENT_GET_PRIVATE(self);
+ /* Actually, at this point, @dbobj is not linked in priv->obj_changed_lst_head,
+ * instead, it's linked on a temporary list. As we still have changes left after
+ * consuming "changed_type", we move it to priv->obj_changed_lst_head. */
nm_assert(!c_list_contains(&priv->obj_changed_lst_head, &dbobj->obj_changed_lst));
nm_c_list_move_tail(&priv->obj_changed_lst_head, &dbobj->obj_changed_lst);
NML_NMCLIENT_LOG_T(self,
@@ -1837,6 +1850,7 @@ nml_dbus_property_o_clear(NMLDBusPropertyO *pr_o, NMClient *self)
pr_o->meta_iface = NULL;
pr_o->dbus_property_idx = 0;
pr_o->is_ready = FALSE;
+ pr_o->nmobj = NULL;
}
void
diff --git a/src/libnm-client-impl/tests/test-nm-client.c b/src/libnm-client-impl/tests/test-nm-client.c
index 4841c96865..a43e98cd18 100644
--- a/src/libnm-client-impl/tests/test-nm-client.c
+++ b/src/libnm-client-impl/tests/test-nm-client.c
@@ -812,7 +812,7 @@ _dev_eth0_1_state_changed_cb(NMDevice *device,
g_assert(arr);
g_assert_cmpint(arr->len, ==, 0);
- // g_assert(!nm_device_get_active_connection(device));
+ g_assert(!nm_device_get_active_connection(device));
}
static void
@@ -921,7 +921,7 @@ test_activate_virtual(void)
g_assert(arr);
g_assert_cmpint(arr->len, ==, 0);
- // g_assert(!nm_device_get_active_connection(dev_eth0_1));
+ g_assert(!nm_device_get_active_connection(dev_eth0_1));
nm_clear_g_signal_handler(dev_eth0_1, &sig_id);