changeset 24004:16fae04366b2 stable

avoid abort on exit from GUI (bug #50664) * octave-interpreter.cc (octave_interpreter::execute): Emit octave_finished_signal when execute_interpreter returns. * octave-interpreter.h (octave_interpreter::octave_finished_signal): New signal. * octave-qt-link.cc (octave_qt_link::octave_qt_link): Connect command_interpreter octave_finished_signal to main_thread quit slot. Connect main_thread finished signal to main_thread deleteLater slot. (octave_qt_link::~octave_qt_link): Don't delete main_thread.
author John W. Eaton <jwe@octave.org>
date Tue, 05 Sep 2017 10:10:23 -0400
parents 20dd13700c08
children ce4fc86e8e77 b02d953d4b9a
files libgui/src/octave-interpreter.cc libgui/src/octave-interpreter.h libgui/src/octave-qt-link.cc
diffstat 3 files changed, 14 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/src/octave-interpreter.cc	Sun Aug 27 13:22:51 2017 +0200
+++ b/libgui/src/octave-interpreter.cc	Tue Sep 05 10:10:23 2017 -0400
@@ -48,6 +48,8 @@
   emit octave_ready_signal ();
 
   m_exit_status = m_app_context->execute_interpreter ();
+
+  emit octave_finished_signal (m_exit_status);
 }
 
 void
--- a/libgui/src/octave-interpreter.h	Sun Aug 27 13:22:51 2017 +0200
+++ b/libgui/src/octave-interpreter.h	Tue Sep 05 10:10:23 2017 -0400
@@ -46,6 +46,8 @@
 
   void octave_ready_signal ();
 
+  void octave_finished_signal (int);
+
 public slots:
 
   // Initialize and execute the octave interpreter.
--- a/libgui/src/octave-qt-link.cc	Sun Aug 27 13:22:51 2017 +0200
+++ b/libgui/src/octave-qt-link.cc	Tue Sep 05 10:10:23 2017 -0400
@@ -60,6 +60,12 @@
   connect (command_interpreter, SIGNAL (octave_ready_signal ()),
            p, SLOT (handle_octave_ready ()));
 
+  connect (command_interpreter, SIGNAL (octave_finished_signal (int)),
+           main_thread, SLOT (quit ()));
+
+  connect (main_thread, SIGNAL (finished ()),
+           main_thread, SLOT (deleteLater ()));
+
   command_interpreter->moveToThread (main_thread);
 
   main_thread->start ();
@@ -67,8 +73,11 @@
 
 octave_qt_link::~octave_qt_link (void)
 {
+  // Note that we don't delete main_thread here.  That is handled by
+  // deleteLater slot that is called when the main_thread issues a
+  // finished signal.
+
   delete command_interpreter;
-  delete main_thread;
 }
 
 void