Skip to content

Commit 38473af

Browse files
committed
fix sigabrt on exit of gui (bug #67230)
* octave-qobject.cc (base_qobject::~base_qobject): disconnect signals before closing dock widgets and deleting interpreter object
1 parent 0f09df4 commit 38473af

File tree

1 file changed

+43
-8
lines changed

1 file changed

+43
-8
lines changed

libgui/src/octave-qobject.cc

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,10 @@ base_qobject::~base_qobject ()
331331
// deleteLater slot that is called when the m_main_thread issues a
332332
// finished signal.
333333

334+
// Prevent Qt from delivering signals to widgets during destruction
335+
if (m_qapplication)
336+
disconnect(m_qapplication, &QApplication::focusChanged, nullptr, nullptr);
337+
334338
// FIXME: Why are dock widget settings and/or the main window
335339
// configuration not saved correctly if the main window is deleted
336340
// after the dock widgets?
@@ -341,31 +345,58 @@ base_qobject::~base_qobject ()
341345
if (! m_main_window)
342346
{
343347
if (m_terminal_widget)
344-
m_terminal_widget->close ();
348+
{
349+
disconnect(m_terminal_widget, nullptr, nullptr, nullptr);
350+
m_terminal_widget->close ();
351+
}
345352

346353
if (m_documentation_widget)
347-
m_documentation_widget->close ();
354+
{
355+
disconnect(m_documentation_widget, nullptr, nullptr, nullptr);
356+
m_documentation_widget->close ();
357+
}
348358

349359
if (m_file_browser_widget)
350-
m_file_browser_widget->close ();
360+
{
361+
disconnect(m_file_browser_widget, nullptr, nullptr, nullptr);
362+
m_file_browser_widget->close ();
363+
}
351364

352365
if (m_history_widget)
353-
m_history_widget->close ();
366+
{
367+
disconnect(m_history_widget, nullptr, nullptr, nullptr);
368+
m_history_widget->close ();
369+
}
354370

355371
if (m_workspace_widget)
356-
m_workspace_widget->close ();
372+
{
373+
disconnect(m_workspace_widget, nullptr, nullptr, nullptr);
374+
m_workspace_widget->close ();
375+
}
357376

358377
if (m_editor_widget)
359-
m_editor_widget->close ();
378+
{
379+
disconnect(m_editor_widget, nullptr, nullptr, nullptr);
380+
m_editor_widget->close ();
381+
}
360382

361383
if (m_variable_editor_widget)
362-
m_variable_editor_widget->close ();
384+
{
385+
disconnect(m_variable_editor_widget, nullptr, nullptr, nullptr);
386+
m_variable_editor_widget->close ();
387+
}
363388

364389
if (m_community_news)
365-
m_community_news->close ();
390+
{
391+
disconnect(m_community_news, nullptr, nullptr, nullptr);
392+
m_community_news->close ();
393+
}
366394
}
367395
else
368396
{
397+
if (m_main_window)
398+
disconnect(m_main_window, nullptr, nullptr, nullptr);
399+
369400
m_main_window->deleteLater ();
370401
}
371402

@@ -378,6 +409,10 @@ base_qobject::~base_qobject ()
378409
delete m_variable_editor_widget;
379410
delete m_community_news;
380411

412+
// Disconnect interpreter signals before deletion
413+
if (m_interpreter_qobj)
414+
disconnect(m_interpreter_qobj, nullptr, nullptr, nullptr);
415+
381416
delete m_interpreter_qobj;
382417
delete m_qsci_tr;
383418
delete m_gui_tr;

0 commit comments

Comments
 (0)