changeset 29633:a548bab9eafa

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.
author John W. Eaton <jwe@octave.org>
date Fri, 07 May 2021 21:05:56 -0400
parents 162abe58aaef
children 1b945016d837
files libgui/src/m-editor/file-editor.cc
diffstat 1 files changed, 9 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- 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<file_editor_tab *> 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;
               }
           }