From d50bc3c1c36dfbb8044bc2d6c4704483031ac0c4 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sat, 14 May 2022 23:27:54 -0400 Subject: [PATCH 1/2] Don't copy values in g_object_new We can safely use the values without copying here. This is safe because we are not emitting any signals before we are done setting the values as properties. --- gobject/gobject.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gobject/gobject.c b/gobject/gobject.c index 4b437be15..aa5dac3ad 100644 --- a/gobject/gobject.c +++ b/gobject/gobject.c @@ -2388,7 +2388,7 @@ g_object_new_valist (GType object_type, params[n_params].value = &values[n_params]; memset (&values[n_params], 0, sizeof (GValue)); - G_VALUE_COLLECT_INIT2 (&values[n_params], vtabs[n_params], pspec->value_type, var_args, 0, &error); + G_VALUE_COLLECT_INIT2 (&values[n_params], vtabs[n_params], pspec->value_type, var_args, G_VALUE_NOCOPY_CONTENTS, &error); if (error) { From 95caffcd260457c488136cd4a922adead4df6cfe Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 15 May 2022 07:55:22 -0400 Subject: [PATCH 2/2] Don't copy values during g_object_set It is safe not to copy arguments here, because we are not emitting any signals before we are done setting the values as properties. This matches what we do for g_object_new now. --- gobject/gobject.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gobject/gobject.c b/gobject/gobject.c index aa5dac3ad..fa161cbf4 100644 --- a/gobject/gobject.c +++ b/gobject/gobject.c @@ -2582,7 +2582,7 @@ g_object_set_valist (GObject *object, if (!g_object_set_is_valid_property (object, pspec, name)) break; - G_VALUE_COLLECT_INIT2 (&value, vtab, pspec->value_type, var_args, 0, &error); + G_VALUE_COLLECT_INIT2 (&value, vtab, pspec->value_type, var_args, G_VALUE_NOCOPY_CONTENTS, &error); if (error) { g_warning ("%s: %s", G_STRFUNC, error);