changeset 27485:1bbeb8aeb1cd

Work around freeze-on-quit in macOS (bug #50025). * octave-qobject.cc (base_qobject::base_qobject): Do not connect() octave_finished_signal to quit slot when running running on Mac (Q_OS_MAC #defined). * octave-qobject.cc (base_qobject::handle_octave_finished): Print "\n" to stderr before having main thread quit, but only on Mac platforms.
author Andrew Janke <andrew@apjanke.net>
date Fri, 11 Oct 2019 10:05:10 -0700
parents 1dbe2d38673f
children adcd6740b2c7
files libgui/src/octave-qobject.cc
diffstat 1 files changed, 7 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/src/octave-qobject.cc	Fri Oct 11 08:50:26 2019 -0700
+++ b/libgui/src/octave-qobject.cc	Fri Oct 11 10:05:10 2019 -0700
@@ -141,8 +141,10 @@
     connect (m_interpreter_qobj, SIGNAL (octave_finished_signal (int)),
              this, SLOT (handle_octave_finished (int)));
 
+#if ! defined (Q_OS_MAC)
     connect (m_interpreter_qobj, SIGNAL (octave_finished_signal (int)),
              m_main_thread, SLOT (quit (void)));
+#endif
 
     connect (m_main_thread, SIGNAL (finished (void)),
              m_main_thread, SLOT (deleteLater (void)));
@@ -204,6 +206,11 @@
 
   void base_qobject::handle_octave_finished (int exit_status)
   {
+#if defined (Q_OS_MAC)
+    // fprintf to stderr is needed by macOS, for poorly-understood reasons.
+    fprintf (stderr, "\n");
+    m_main_thread->quit ();
+#endif
     qApp->exit (exit_status);
   }