gresource: Use atomic pointer exchange operations to nullify and check

This commit is contained in:
Marco Trevisan (Treviño) 2022-06-21 05:01:17 +02:00
parent 9c32cfbaaa
commit bfd77693ce

View File

@ -1443,14 +1443,13 @@ g_static_resource_fini (GStaticResource *static_resource)
register_lazy_static_resources_unlocked (); register_lazy_static_resources_unlocked ();
resource = g_atomic_pointer_get (&static_resource->resource); resource = g_atomic_pointer_exchange (&static_resource->resource, NULL);
if (resource) if (resource)
{ {
/* There should be at least two references to the resource now: one for /* There should be at least two references to the resource now: one for
* static_resource->resource, and one in the registered_resources list. */ * static_resource->resource, and one in the registered_resources list. */
g_assert (g_atomic_int_get (&resource->ref_count) >= 2); g_assert (g_atomic_int_get (&resource->ref_count) >= 2);
g_atomic_pointer_set (&static_resource->resource, NULL);
g_resources_unregister_unlocked (resource); g_resources_unregister_unlocked (resource);
g_resource_unref (resource); g_resource_unref (resource);
} }