summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKalev Lember <klember@redhat.com>2016-12-02 12:44:32 +0100
committerKalev Lember <klember@redhat.com>2016-12-02 12:44:32 +0100
commit70381c637d2373010d24c5f13724a19d7dd04702 (patch)
treee95f41edff6c0f9869414602d8047a8a1b79c216
parentd455f9449a77d0db0c17abba5e5dd766dd00cc75 (diff)
downloadappstream-glib-70381c637d2373010d24c5f13724a19d7dd04702.tar.gz
Fix one more thread safety issue with AsRefString
-rw-r--r--libappstream-glib/as-ref-string.c12
1 files changed, 4 insertions, 8 deletions
diff --git a/libappstream-glib/as-ref-string.c b/libappstream-glib/as-ref-string.c
index 0b8df74..054d243 100644
--- a/libappstream-glib/as-ref-string.c
+++ b/libappstream-glib/as-ref-string.c
@@ -64,13 +64,6 @@ as_ref_string_get_hash_safe (void)
return as_ref_string_hash;
}
-static GHashTable *
-as_ref_string_get_hash (void)
-{
- g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&as_ref_string_mutex);
- return as_ref_string_get_hash_safe ();
-}
-
/**
* as_ref_string_new_static:
* @str: a string
@@ -150,17 +143,20 @@ AsRefString *
as_ref_string_new_with_length (const gchar *str, gsize len)
{
AsRefStringHeader *hdr;
+ g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&as_ref_string_mutex);
g_return_val_if_fail (str != NULL, NULL);
/* already in hash */
- if (g_hash_table_contains (as_ref_string_get_hash (), str)) {
+ if (g_hash_table_contains (as_ref_string_get_hash_safe (), str)) {
hdr = AS_REFPTR_TO_HEADER (str);
if (hdr->refcnt < 0)
return str;
g_atomic_int_inc (&hdr->refcnt);
return str;
}
+
+ g_clear_pointer (&locker, g_mutex_locker_free);
return as_ref_string_new_copy_with_length (str, len);
}