summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2018-03-05 15:23:31 +0100
committerThomas Haller <thaller@redhat.com>2018-03-12 18:03:07 +0100
commit8b75f10ebe5714e1872f0376317b85c57569db9c (patch)
treee1f20c30e4136430b0ef63ed05941ceb591c95d5
parent34493c513426ab06221b50ec13732ff090990e7a (diff)
downloadNetworkManager-8b75f10ebe5714e1872f0376317b85c57569db9c.tar.gz
device: set properties before emitting the change notification
The change doesn't really make a difference. I thought it would, so I did it. But turns out (as the code correctly assumes), while the notifications are frozen, it's OK to leave the property still in an inconsistent state while emitting the notify signal. Still, it feels slightly more correct this way, so keep the change.
-rw-r--r--src/devices/nm-device-macsec.c9
-rw-r--r--src/devices/nm-device-macvlan.c15
-rw-r--r--src/devices/nm-device-tun.c25
-rw-r--r--src/devices/nm-device-vxlan.c70
4 files changed, 63 insertions, 56 deletions
diff --git a/src/devices/nm-device-macsec.c b/src/devices/nm-device-macsec.c
index 8b51f8ce60..554238a320 100644
--- a/src/devices/nm-device-macsec.c
+++ b/src/devices/nm-device-macsec.c
@@ -186,8 +186,12 @@ update_properties (NMDevice *device)
nm_device_parent_set_ifindex (device, props->parent_ifindex);
#define CHECK_PROPERTY_CHANGED(field, prop) \
- if (props->field != priv->props.field) \
- _notify (self, prop)
+ G_STMT_START { \
+ if (priv->props.field != props->field) { \
+ priv->props.field = props->field; \
+ _notify (self, prop); \
+ } \
+ } G_STMT_END
CHECK_PROPERTY_CHANGED (sci, PROP_SCI);
CHECK_PROPERTY_CHANGED (cipher_suite, PROP_CIPHER_SUITE);
@@ -202,7 +206,6 @@ update_properties (NMDevice *device)
CHECK_PROPERTY_CHANGED (scb, PROP_SCB);
CHECK_PROPERTY_CHANGED (replay_protect, PROP_REPLAY_PROTECT);
- priv->props = *props;
g_object_thaw_notify ((GObject *) device);
}
diff --git a/src/devices/nm-device-macvlan.c b/src/devices/nm-device-macvlan.c
index 2a461543b0..a336012909 100644
--- a/src/devices/nm-device-macvlan.c
+++ b/src/devices/nm-device-macvlan.c
@@ -197,12 +197,17 @@ update_properties (NMDevice *device)
g_object_freeze_notify (object);
nm_device_parent_set_ifindex (device, plink->parent);
- if (priv->props.mode != props->mode)
- _notify (self, PROP_MODE);
- if (priv->props.no_promisc != props->no_promisc)
- _notify (self, PROP_NO_PROMISC);
- priv->props = *props;
+#define CHECK_PROPERTY_CHANGED(field, prop) \
+ G_STMT_START { \
+ if (priv->props.field != props->field) { \
+ priv->props.field = props->field; \
+ _notify (self, prop); \
+ } \
+ } G_STMT_END
+
+ CHECK_PROPERTY_CHANGED (mode, PROP_MODE);
+ CHECK_PROPERTY_CHANGED (no_promisc, PROP_NO_PROMISC);
g_object_thaw_notify (object);
}
diff --git a/src/devices/nm-device-tun.c b/src/devices/nm-device-tun.c
index a7d7c0bf19..fa837c4b6e 100644
--- a/src/devices/nm-device-tun.c
+++ b/src/devices/nm-device-tun.c
@@ -99,18 +99,19 @@ update_properties (NMDeviceTun *self)
g_object_freeze_notify (object);
- if (priv->props.owner != props.owner)
- _notify (self, PROP_OWNER);
- if (priv->props.group != props.group)
- _notify (self, PROP_GROUP);
- if (priv->props.no_pi != props.no_pi)
- _notify (self, PROP_NO_PI);
- if (priv->props.vnet_hdr != props.vnet_hdr)
- _notify (self, PROP_VNET_HDR);
- if (priv->props.multi_queue != props.multi_queue)
- _notify (self, PROP_MULTI_QUEUE);
-
- memcpy (&priv->props, &props, sizeof (NMPlatformTunProperties));
+#define CHECK_PROPERTY_CHANGED(field, prop) \
+ G_STMT_START { \
+ if (priv->props.field != props.field) { \
+ priv->props.field = props.field; \
+ _notify (self, prop); \
+ } \
+ } G_STMT_END
+
+ CHECK_PROPERTY_CHANGED (owner, PROP_OWNER);
+ CHECK_PROPERTY_CHANGED (group, PROP_GROUP);
+ CHECK_PROPERTY_CHANGED (no_pi, PROP_NO_PI);
+ CHECK_PROPERTY_CHANGED (vnet_hdr, PROP_VNET_HDR);
+ CHECK_PROPERTY_CHANGED (multi_queue, PROP_MULTI_QUEUE);
g_object_thaw_notify (object);
}
diff --git a/src/devices/nm-device-vxlan.c b/src/devices/nm-device-vxlan.c
index d9efe8404b..e09c7fbbbd 100644
--- a/src/devices/nm-device-vxlan.c
+++ b/src/devices/nm-device-vxlan.c
@@ -97,42 +97,40 @@ update_properties (NMDevice *device)
if (priv->props.parent_ifindex != props->parent_ifindex)
nm_device_parent_set_ifindex (device, props->parent_ifindex);
- if (priv->props.id != props->id)
- _notify (self, PROP_ID);
- if (priv->props.local != props->local)
- _notify (self, PROP_LOCAL);
- if (memcmp (&priv->props.local6, &props->local6, sizeof (props->local6)) != 0)
- _notify (self, PROP_LOCAL);
- if (priv->props.group != props->group)
- _notify (self, PROP_GROUP);
- if (memcmp (&priv->props.group6, &props->group6, sizeof (props->group6)) != 0)
- _notify (self, PROP_GROUP);
- if (priv->props.tos != props->tos)
- _notify (self, PROP_TOS);
- if (priv->props.ttl != props->ttl)
- _notify (self, PROP_TTL);
- if (priv->props.learning != props->learning)
- _notify (self, PROP_LEARNING);
- if (priv->props.ageing != props->ageing)
- _notify (self, PROP_AGEING);
- if (priv->props.limit != props->limit)
- _notify (self, PROP_LIMIT);
- if (priv->props.src_port_min != props->src_port_min)
- _notify (self, PROP_SRC_PORT_MIN);
- if (priv->props.src_port_max != props->src_port_max)
- _notify (self, PROP_SRC_PORT_MAX);
- if (priv->props.dst_port != props->dst_port)
- _notify (self, PROP_DST_PORT);
- if (priv->props.proxy != props->proxy)
- _notify (self, PROP_PROXY);
- if (priv->props.rsc != props->rsc)
- _notify (self, PROP_RSC);
- if (priv->props.l2miss != props->l2miss)
- _notify (self, PROP_L2MISS);
- if (priv->props.l3miss != props->l3miss)
- _notify (self, PROP_L3MISS);
-
- priv->props = *props;
+
+#define CHECK_PROPERTY_CHANGED(field, prop) \
+ G_STMT_START { \
+ if (priv->props.field != props->field) { \
+ priv->props.field = props->field; \
+ _notify (self, prop); \
+ } \
+ } G_STMT_END
+
+#define CHECK_PROPERTY_CHANGED_IN6ADDR(field, prop) \
+ G_STMT_START { \
+ if (memcmp (&priv->props.field, &props->field, sizeof (props->field)) != 0) { \
+ priv->props.field = props->field; \
+ _notify (self, prop); \
+ } \
+ } G_STMT_END
+
+ CHECK_PROPERTY_CHANGED (id, PROP_ID);
+ CHECK_PROPERTY_CHANGED (local, PROP_LOCAL);
+ CHECK_PROPERTY_CHANGED_IN6ADDR (local6, PROP_LOCAL);
+ CHECK_PROPERTY_CHANGED (group, PROP_GROUP);
+ CHECK_PROPERTY_CHANGED_IN6ADDR (group6, PROP_GROUP);
+ CHECK_PROPERTY_CHANGED (tos, PROP_TOS);
+ CHECK_PROPERTY_CHANGED (ttl, PROP_TTL);
+ CHECK_PROPERTY_CHANGED (learning, PROP_LEARNING);
+ CHECK_PROPERTY_CHANGED (ageing, PROP_AGEING);
+ CHECK_PROPERTY_CHANGED (limit, PROP_LIMIT);
+ CHECK_PROPERTY_CHANGED (src_port_min, PROP_SRC_PORT_MIN);
+ CHECK_PROPERTY_CHANGED (src_port_max, PROP_SRC_PORT_MAX);
+ CHECK_PROPERTY_CHANGED (dst_port, PROP_DST_PORT);
+ CHECK_PROPERTY_CHANGED (proxy, PROP_PROXY);
+ CHECK_PROPERTY_CHANGED (rsc, PROP_RSC);
+ CHECK_PROPERTY_CHANGED (l2miss, PROP_L2MISS);
+ CHECK_PROPERTY_CHANGED (l3miss, PROP_L3MISS);
g_object_thaw_notify (object);
}