# HG changeset patch # User John W. Eaton # Date 1620435956 14400 # Node ID a548bab9eafa205a3cdf9aa30856829f317c2aa1 # Parent 162abe58aaeff82f27a37d5f6cee508304d3b768 avoid crash when closing GUI with open editor tabs (bug #60500) * file-editor.cc (file_editor::handle_tab_ready_to_close, file_editor::handle_tab_remove_request): Use deleteLater to delete file editor tab objects. diff -r 162abe58aaef -r a548bab9eafa libgui/src/m-editor/file-editor.cc --- a/libgui/src/m-editor/file-editor.cc Fri May 07 23:35:15 2021 +0200 +++ b/libgui/src/m-editor/file-editor.cc Fri May 07 21:05:56 2021 -0400 @@ -515,6 +515,10 @@ if (m_closing_canceled) return; + // FIXME: Why count down to zero here before doing anything? Why + // not remove and delete each tab that is ready to be closed, one + // per invocation? + m_number_of_tabs--; if (m_number_of_tabs > 0) @@ -534,7 +538,7 @@ std::list editor_tab_lst = m_tab_widget->tab_list (); for (auto editor_tab : editor_tab_lst) - delete editor_tab; + editor_tab->deleteLater (); m_tab_widget->clear (); @@ -979,10 +983,10 @@ if (m_tab_widget->widget (i) == fileEditorTab) { m_tab_widget->removeTab (i); - // Deleting sender is dodgy, but works because the signal - // is the last item in the sender's routines. - // FIXME: can we use deleteLater here? - delete fileEditorTab; + + // Deleting the sender (even with deleteLater) seems a + // bit strange. Is there a better way? + fileEditorTab->deleteLater (); break; } }