From fa17060027864f114d6c4d96265e50a91d8cf523 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Thu, 29 Dec 2022 18:53:35 +0000 Subject: [PATCH] gvariant: Remove redundant g_variant_serialised_n_children() calls MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These functions were previously calling `g_variant_serialised_n_children()` twice just to validate the input, in the case that the input was a serialised variant. That’s not necessary, and checking the number of children in a serialised variant is not necessarily cheap. Move the checks around so that the number of children is only checked once on each code path. This doesn’t introduce any functional changes. Signed-off-by: Philip Withnall --- glib/gvariant-core.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/glib/gvariant-core.c b/glib/gvariant-core.c index 477802282..f5e9dddfe 100644 --- a/glib/gvariant-core.c +++ b/glib/gvariant-core.c @@ -1138,11 +1138,13 @@ GVariant * g_variant_get_child_value (GVariant *value, gsize index_) { - g_return_val_if_fail (index_ < g_variant_n_children (value), NULL); g_return_val_if_fail (value->depth < G_MAXSIZE, NULL); if (~g_atomic_int_get (&value->state) & STATE_SERIALISED) { + /* g_variant_serialised_get_child() does its own checks on index_ */ + g_return_val_if_fail (index_ < g_variant_n_children (value), NULL); + g_variant_lock (value); if (~value->state & STATE_SERIALISED) @@ -1233,11 +1235,13 @@ GVariant * g_variant_maybe_get_child_value (GVariant *value, gsize index_) { - g_return_val_if_fail (index_ < g_variant_n_children (value), NULL); g_return_val_if_fail (value->depth < G_MAXSIZE, NULL); if (~g_atomic_int_get (&value->state) & STATE_SERIALISED) { + /* g_variant_serialised_get_child() does its own checks on index_ */ + g_return_val_if_fail (index_ < g_variant_n_children (value), NULL); + g_variant_lock (value); if (~value->state & STATE_SERIALISED)