From 44fed3c3404efcb2a9db9e4a2ad6b87c3b9a44d8 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Mon, 23 Mar 2020 11:42:59 +0100 Subject: [PATCH] core: avoid assertion failure in _settings_connection_flags_changed() without device It seems not unexpected, that we get a flags-changed notification while having no device. Handle it gracefully and avoid the assertion failure. #0 _g_log_abort (breakpoint=breakpoint@entry=1) at gmessages.c:583 #1 g_logv (log_domain=0x55f3c86f0262 "NetworkManager", log_level=G_LOG_LEVEL_CRITICAL, format=, args=args@entry=0x7ffcbf88f1c0) at gmessages.c:1391 #2 g_log (log_domain=log_domain@entry=0x55f3c86f0262 "NetworkManager", log_level=log_level@entry=G_LOG_LEVEL_CRITICAL, format=format@entry=0x7f21e99adb27 "%s: assertion '%s' failed") at gmessages.c:1432 #3 g_return_if_fail_warning (log_domain=log_domain@entry=0x55f3c86f0262 "NetworkManager", pretty_function=pretty_function@entry=0x55f3c875f290 <__func__.53083> "nm_device_reapply", expression=expression@entry=0x55f3c8752507 "NM_IS_DEVICE (self)") at gmessages.c:2809 #4 nm_device_reapply (self=0x0, connection=connection@entry=0x55f3caab4e60, error=error@entry=0x7ffcbf88f308) at src/devices/nm-device.c:12107 #5 _settings_connection_flags_changed (settings_connection=, self=0x55f3caabca70 [NMActRequest]) at src/nm-active-connection.c:960 #9 (instance=instance@entry=0x55f3caaaf530, signal_id=, detail=detail@entry=0) at gsignal.c:3447 #6 g_closure_invoke (closure=0x55f3caa4c160, return_value=return_value@entry=0x0, n_param_values=1, param_values=param_values@entry=0x7ffcbf88f520, invocation_hint=invocation_hint@entry=0x7ffcbf88f4c0) at gclosure.c:804 #7 signal_emit_unlocked_R (node=node@entry=0x55f3ca9dcf90, detail=detail@entry=0, instance=instance@entry=0x55f3caaaf530, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7ffcbf88f520) at gsignal.c:3635 #8 g_signal_emit_valist (instance=, signal_id=, detail=, var_args=var_args@entry=0x7ffcbf88f6a0) at gsignal.c:3391 #10 nm_settings_connection_set_flags_full (self=self@entry=0x55f3caaaf530 [NMSettingsConnection], mask=, value=) at src/settings/nm-settings-connection.c:2025 #11 _connection_changed_process_all_dirty (update_reason=(NM_SETTINGS_CONNECTION_UPDATE_REASON_RESET_SYSTEM_SECRETS | NM_SETTINGS_CONNECTION_UPDATE_REASON_RESET_AGENT_SECRETS), sett_mask=, sett_flags=, connection=0x55f3caab4f80, sett_conn_entry=, self=0x55f3ca99c000 [NMSettings]) at src/settings/nm-settings.c:1099 #12 _connection_changed_process_all_dirty (update_reason=(NM_SETTINGS_CONNECTION_UPDATE_REASON_RESET_SYSTEM_SECRETS | NM_SETTINGS_CONNECTION_UPDATE_REASON_RESET_AGENT_SECRETS), override_sett_flags=1, sett_mask=_NM_SETTINGS_CONNECTION_INT_FLAGS_PERSISTENT_MASK, sett_flags=, allow_add_to_no_auto_default=0, sett_conn_entry=, self=0x55f3ca99c000 [NMSettings]) at src/settings/nm-settings.c:1284 #13 _connection_changed_process_all_dirty (self=self@entry=0x55f3ca99c000 [NMSettings], allow_add_to_no_auto_default=allow_add_to_no_auto_default@entry=0, sett_flags=sett_flags@entry=NM_SETTINGS_CONNECTION_INT_FLAGS_NONE, sett_mask=sett_mask@entry=NM_SETTINGS_CONNECTION_INT_FLAGS_NONE, override_sett_flags=override_sett_flags@entry=1, update_reason=update_reason@entry=(NM_SETTINGS_CONNECTION_UPDATE_REASON_RESET_SYSTEM_SECRETS | NM_SETTINGS_CONNECTION_UPDATE_REASON_RESET_AGENT_SECRETS)) at src/settings/nm-settings.c:1304 #14 _plugin_connections_reload (self=self@entry=0x55f3ca99c000 [NMSettings]) at src/settings/nm-settings.c:1417 #15 impl_settings_reload_connections (obj=0x55f3ca99c000 [NMSettings], interface_info=, method_info=, connection=, sender=, invocation=0x7f21d000c100 [GDBusMethodInvocation], parameters=0x55f3ca9e1f20) at src/settings/nm-settings.c:2822 ... https://bugzilla.redhat.com/show_bug.cgi?id=1816067 --- src/nm-active-connection.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/nm-active-connection.c b/src/nm-active-connection.c index 33ebdfc292..63dd891056 100644 --- a/src/nm-active-connection.c +++ b/src/nm-active-connection.c @@ -945,7 +945,7 @@ static void _settings_connection_flags_changed (NMSettingsConnection *settings_connection, NMActiveConnection *self) { - GError *error = NULL; + NMDevice *device; nm_assert (NM_IS_ACTIVE_CONNECTION (self)); nm_assert (NM_IS_SETTINGS_CONNECTION (settings_connection)); @@ -957,12 +957,17 @@ _settings_connection_flags_changed (NMSettingsConnection *settings_connection, return; _set_activation_type_managed (self); - if (!nm_device_reapply (nm_active_connection_get_device (self), - nm_settings_connection_get_connection ((nm_active_connection_get_settings_connection (self))), - &error)) { - _LOGW ("failed to reapply new device settings on previously externally managed device: %s", - error->message); - g_error_free (error); + + device = nm_active_connection_get_device (self); + if (device) { + gs_free_error GError *error = NULL; + + if (!nm_device_reapply (device, + nm_settings_connection_get_connection (nm_active_connection_get_settings_connection (self)), + &error)) { + _LOGW ("failed to reapply new device settings on previously externally managed device: %s", + error->message); + } } }