mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-05-07 04:58:01 +02:00
device: clear queued_state callback in dispose
dispose() calls _cleanup_generic_pre() which in turn already calls
nm_device_queued_state_clear(). So we would expect that at the end
of dispose() no queued-state is pending.
However, there there are crashes reports in queued_set_state() with the
device instance already destructed (rh#1270247). Add this check trying
to avoid the crash and closing in on the cause.
Related: https://bugzilla.redhat.com/show_bug.cgi?id=1180827
Related: https://bugzilla.redhat.com/show_bug.cgi?id=1270247
Related: https://bugzilla.redhat.com/show_bug.cgi?id=1298009
(cherry picked from commit 76f90812f4)
This commit is contained in:
parent
8213479247
commit
baefcdbade
1 changed files with 8 additions and 1 deletions
|
|
@ -8831,7 +8831,7 @@ nm_device_queued_state_clear (NMDevice *self)
|
||||||
if (priv->queued_state.id) {
|
if (priv->queued_state.id) {
|
||||||
_LOGD (LOGD_DEVICE, "clearing queued state transition (id %d)",
|
_LOGD (LOGD_DEVICE, "clearing queued state transition (id %d)",
|
||||||
priv->queued_state.id);
|
priv->queued_state.id);
|
||||||
g_source_remove (priv->queued_state.id);
|
nm_clear_g_source (&priv->queued_state.id);
|
||||||
nm_device_remove_pending_action (self, queued_state_to_string (priv->queued_state.state), TRUE);
|
nm_device_remove_pending_action (self, queued_state_to_string (priv->queued_state.state), TRUE);
|
||||||
}
|
}
|
||||||
memset (&priv->queued_state, 0, sizeof (priv->queued_state));
|
memset (&priv->queued_state, 0, sizeof (priv->queued_state));
|
||||||
|
|
@ -9273,6 +9273,13 @@ dispose (GObject *object)
|
||||||
nm_clear_g_source (&priv->device_ip_link_changed_id);
|
nm_clear_g_source (&priv->device_ip_link_changed_id);
|
||||||
|
|
||||||
G_OBJECT_CLASS (nm_device_parent_class)->dispose (object);
|
G_OBJECT_CLASS (nm_device_parent_class)->dispose (object);
|
||||||
|
|
||||||
|
if (nm_clear_g_source (&priv->queued_state.id)) {
|
||||||
|
/* FIXME: we'd expect the queud_state to be alredy cleared and this statement
|
||||||
|
* not being necessary. Add this check here to hopefully investigate crash
|
||||||
|
* rh#1270247. */
|
||||||
|
g_return_if_reached ();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue