diff options
author | Kalev Lember <klember@redhat.com> | 2016-12-02 12:44:32 +0100 |
---|---|---|
committer | Kalev Lember <klember@redhat.com> | 2016-12-02 12:44:32 +0100 |
commit | 70381c637d2373010d24c5f13724a19d7dd04702 (patch) | |
tree | e95f41edff6c0f9869414602d8047a8a1b79c216 | |
parent | d455f9449a77d0db0c17abba5e5dd766dd00cc75 (diff) | |
download | appstream-glib-70381c637d2373010d24c5f13724a19d7dd04702.tar.gz |
Fix one more thread safety issue with AsRefString
-rw-r--r-- | libappstream-glib/as-ref-string.c | 12 |
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); } |