summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAna Cabral <acabral@redhat.com>2022-01-25 11:29:50 +0100
committerAna Cabral <acabral@redhat.com>2022-01-25 17:15:17 +0100
commite2ee0e6a0dc2fc7f1b6acaf8675b577364711894 (patch)
tree48cec5fb0a1296e76f48a9f8ef820945944223f7
parentb88ce6a317ed607f6faa5c66481676b207bfdf41 (diff)
downloadNetworkManager-e2ee0e6a0dc2fc7f1b6acaf8675b577364711894.tar.gz
core/wwan: ensure correct conditions before signal emission
Currently, ip4 new config signal is being emitted twice, due to the lack of a barrier to a possible situation. This commit includes this. This fixes a crash on NMCI tests due to an assertion failure, now it will not go ahead in the function anymore if it is under the undesired conditions. The backtrace of the crashes can be found at https://bugzilla.redhat.com/show_bug.cgi?id=2028385
-rw-r--r--src/core/devices/wwan/nm-device-modem.c5
-rw-r--r--src/core/devices/wwan/nm-modem.c4
2 files changed, 8 insertions, 1 deletions
diff --git a/src/core/devices/wwan/nm-device-modem.c b/src/core/devices/wwan/nm-device-modem.c
index 80691bf976..4a0d9e4435 100644
--- a/src/core/devices/wwan/nm-device-modem.c
+++ b/src/core/devices/wwan/nm-device-modem.c
@@ -170,7 +170,10 @@ modem_new_config(NMModem *modem,
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE(self);
NMDevice *device = NM_DEVICE(self);
- g_return_if_fail(nm_device_devip_get_state(device, addr_family) == NM_DEVICE_IP_STATE_PENDING);
+ if (nm_device_devip_get_state(device, addr_family) != NM_DEVICE_IP_STATE_PENDING) {
+ _LOGD(LOGD_MB, "retrieving IP configuration while no longer in pending state");
+ return;
+ }
if (error) {
_LOGW(LOGD_MB, "retrieving IP configuration failed: %s", error->message);
diff --git a/src/core/devices/wwan/nm-modem.c b/src/core/devices/wwan/nm-modem.c
index 225eaa6501..a5ee8ce8ed 100644
--- a/src/core/devices/wwan/nm-modem.c
+++ b/src/core/devices/wwan/nm-modem.c
@@ -650,6 +650,10 @@ _ppp_mgr_callback(NMPppMgr *ppp_mgr, const NMPppMgrCallbackData *callback_data,
* We will emit it together with stage3. */
continue;
}
+ if (priv->ip_data_x[IS_IPv4].stage3_on_idle_source) {
+ /* We scheduled already a handler. Let it handle the new configuration. */
+ continue;
+ }
if (callback_data->data.ip_changed_x[IS_IPv4])
_ppp_maybe_emit_new_config(self, IS_IPv4 ? AF_INET : AF_INET6);
}