Skip to content

Commit 41af9ad

Browse files
Fix segfault at end of tests: remove tick callbacks when deleting app.
1 parent 0cf6f0d commit 41af9ad

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

src/ZooLib/Application.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ void ZooLib::Application::Initialize()
2424

2525
ZooLib::Application::~Application()
2626
{
27+
gtk_widget_remove_tick_callback(m_MainWindow, m_RunObserversCallbackId);
28+
if (m_ExecuteTestActionCallbackId != 0)
29+
{
30+
gtk_widget_remove_tick_callback(m_MainWindow, m_ExecuteTestActionCallbackId);
31+
}
32+
2733
g_object_unref(m_GtkApp);
2834
m_GtkApp = nullptr;
2935
delete m_TestActionsStack;
@@ -65,7 +71,7 @@ void ZooLib::Application::OnActivate(GtkApplication *app)
6571
adw_toolbar_view_set_content(ADW_TOOLBAR_VIEW(mainView), content);
6672

6773
gtk_window_present(GTK_WINDOW(m_MainWindow));
68-
gtk_widget_add_tick_callback(
74+
m_RunObserversCallbackId = gtk_widget_add_tick_callback(
6975
m_MainWindow,
7076
[](GtkWidget *widget, GdkFrameClock *frameClock, gpointer data) -> gboolean {
7177
auto *localApp = static_cast<Application *>(data);
@@ -77,7 +83,7 @@ void ZooLib::Application::OnActivate(GtkApplication *app)
7783

7884
if (m_TestMode)
7985
{
80-
gtk_widget_add_tick_callback(
86+
m_ExecuteTestActionCallbackId = gtk_widget_add_tick_callback(
8187
m_MainWindow,
8288
[](GtkWidget *widget, GdkFrameClock *frameClock, gpointer data) -> gboolean {
8389
auto app = static_cast<Application *>(data);

src/ZooLib/Application.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ namespace ZooLib
2727
*/
2828
class Application
2929
{
30+
guint m_RunObserversCallbackId{};
31+
guint m_ExecuteTestActionCallbackId{};
32+
3033
protected:
3134
/**
3235
* \brief Command dispatcher for handling application commands.

0 commit comments

Comments
 (0)