From: Ryan Lortie Date: Sat, 29 Nov 2014 20:04:45 +0000 (-0500) Subject: GVariant: refactor locking a bit more X-Git-Url: http://review.tizen.org/git/?p=platform%2Fupstream%2Fglib.git;a=commitdiff_plain;h=3fffe57c99c05c68312494adc640b8f46e16a7cd GVariant: refactor locking a bit more Change the internal g_variant_ensure_serialised() helper over to working on unlocked instances and have it conditionally acquire the lock using the utility function added in the last commit. --- diff --git a/glib/gvariant-core.c b/glib/gvariant-core.c index 0d50115..4ab4238 100644 --- a/glib/gvariant-core.c +++ b/glib/gvariant-core.c @@ -401,15 +401,11 @@ g_variant_fill_gvs (GVariantSerialised *serialised, * that size and serialises the instance into the buffer. The * 'children' array is then released and the instance is set to * serialised form based on the contents of the buffer. - * - * The current thread must hold the lock on @value. */ static void g_variant_ensure_serialised (GVariant *value) { - g_assert (value->state & STATE_LOCKED); - - if (~value->state & STATE_SERIALISED) + if (g_variant_lock_in_tree_form (value)) { GBytes *bytes; gpointer data; @@ -423,6 +419,8 @@ g_variant_ensure_serialised (GVariant *value) value->contents.serialised.data = g_bytes_get_data (bytes, NULL); value->contents.serialised.bytes = bytes; value->state |= STATE_SERIALISED; + + g_variant_unlock (value); } } @@ -826,9 +824,7 @@ g_variant_get_size (GVariant *value) gconstpointer g_variant_get_data (GVariant *value) { - g_variant_lock (value); g_variant_ensure_serialised (value); - g_variant_unlock (value); return value->contents.serialised.data; } @@ -854,9 +850,7 @@ g_variant_get_data_as_bytes (GVariant *value) gsize bytes_size; gsize size; - g_variant_lock (value); g_variant_ensure_serialised (value); - g_variant_unlock (value); bytes_data = g_bytes_get_data (value->contents.serialised.bytes, &bytes_size); data = value->contents.serialised.data;