From 60c315b53ba9fb2fc0c8e85674d365c6d5a7ee4b Mon Sep 17 00:00:00 2001 From: Ondrej Holy Date: Wed, 15 Feb 2017 08:58:43 +0100 Subject: [PATCH] user-accounts: Fix crash when name is changed and dialogue closed Wrong variables are used to store timeout id, consequently, the sources are not properly removed in all cases. Then the dialog may crash in certain cases if it is closed before the source functions are called. https://bugzilla.gnome.org/show_bug.cgi?id=778595 --- panels/user-accounts/um-account-dialog.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/panels/user-accounts/um-account-dialog.c b/panels/user-accounts/um-account-dialog.c index 9d196dbdf..ed5093e27 100644 --- a/panels/user-accounts/um-account-dialog.c +++ b/panels/user-accounts/um-account-dialog.c @@ -393,7 +393,7 @@ on_username_changed (GtkComboBoxText *combo, static gboolean local_name_timeout (UmAccountDialog *self) { - self->local_username_timeout_id = 0; + self->local_name_timeout_id = 0; dialog_validate (self); @@ -439,10 +439,15 @@ on_name_changed (GtkEditable *editable, gtk_combo_box_set_active (GTK_COMBO_BOX (self->local_username), 0); } + if (self->local_name_timeout_id != 0) { + g_source_remove (self->local_name_timeout_id); + self->local_name_timeout_id = 0; + } + clear_entry_validation_error (GTK_ENTRY (editable)); gtk_dialog_set_response_sensitive (GTK_DIALOG (self), GTK_RESPONSE_OK, FALSE); - self->local_username_timeout_id = g_timeout_add (PASSWORD_CHECK_TIMEOUT, (GSourceFunc) local_name_timeout, self); + self->local_name_timeout_id = g_timeout_add (PASSWORD_CHECK_TIMEOUT, (GSourceFunc) local_name_timeout, self); } static void