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
This commit is contained in:
Ana Cabral
2022-01-25 11:29:50 +01:00
parent b88ce6a317
commit e2ee0e6a0d
2 changed files with 8 additions and 1 deletions

View File

@@ -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);

View File

@@ -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);
}