Mercurial > octave
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