placesview: Avoid use-after-free

The places view has questionable code for handling
'destroy', which seems to trigger use-after-free in
some cases. Clean this up a bit by acknowledging the
cancellation fully, rather than relying on the
destroyed flag.
This commit is contained in:
Matthias Clasen 2021-02-11 09:14:34 -05:00
parent 0cc43e10a5
commit 95d48ac2e8

View File

@ -986,9 +986,14 @@ network_enumeration_next_files_finished (GObject *source_object,
if (error)
{
if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
g_warning ("Failed to fetch network locations: %s", error->message);
if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
{
g_clear_error (&error);
g_object_unref (view);
return;
}
g_warning ("Failed to fetch network locations: %s", error->message);
g_clear_error (&error);
}
else
@ -999,16 +1004,11 @@ network_enumeration_next_files_finished (GObject *source_object,
g_list_free_full (detected_networks, g_object_unref);
}
g_object_unref (view);
update_network_state (view);
monitor_network (view);
update_loading (view);
/* avoid to update widgets if we are already destroyed
(and got cancelled s a result of that) */
if (!view->destroyed)
{
update_network_state (view);
monitor_network (view);
update_loading (view);
}
g_object_unref (view);
}
static void