gapplication: remove inactivity_timeout source on finalize

The event source used to handle inactivity_timeout doesn't hold a
reference on the application. Therefore, it is possible for callback
function of the event source to run after the application has been
freed, leading to use-after-free problem. To avoid the problem, we
should remove the event source before the application is freed.

This should fix SIGBUS crash of gio/tests/gapplication on FreeBSD.
https://gitlab.gnome.org/GNOME/glib/issues/1846#note_566550
This commit is contained in:
Ting-Wei Lan 2019-07-27 15:28:23 +08:00
parent 517f756acf
commit 0ed8605079

View File

@ -1373,6 +1373,9 @@ g_application_finalize (GObject *object)
{
GApplication *application = G_APPLICATION (object);
if (application->priv->inactivity_timeout_id)
g_source_remove (application->priv->inactivity_timeout_id);
g_slist_free_full (application->priv->option_groups, (GDestroyNotify) g_option_group_unref);
if (application->priv->main_options)
g_option_group_unref (application->priv->main_options);