[glib/floating-variants-grr] Always ref-sink variants in g_object_set




commit 64f5a1637efa9290308486fb6aebb3c069167f7e
Author: Matthias Clasen <mclasen redhat com>
Date:   Wed Oct 5 07:16:20 2022 -0400

    Always ref-sink variants in g_object_set
    
    When collecting varargs, ignore the NOCOPY_CONTENTS
    flag for variants. That is what our docs advice for
    refcounted types, and it fixes a regression that
    was inadvertendly introduced when we stopped doing
    some extra GValue copies.
    
    Fixes: #2774

 gobject/gvaluetypes.c | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)
---
diff --git a/gobject/gvaluetypes.c b/gobject/gvaluetypes.c
index 03f713538b..75998fe7e8 100644
--- a/gobject/gvaluetypes.c
+++ b/gobject/gvaluetypes.c
@@ -388,12 +388,8 @@ value_collect_variant (GValue        *value,
 {
   if (!collect_values[0].v_pointer)
     value->data[0].v_pointer = NULL;
-  else if (collect_flags & G_VALUE_NOCOPY_CONTENTS)
-    {
-      value->data[0].v_pointer = collect_values[0].v_pointer;
-      value->data[1].v_uint = G_VALUE_NOCOPY_CONTENTS;
-    }
   else
+    /* never honour G_VALUE_NOCOPY_CONTENTS for ref-counted types */
     value->data[0].v_pointer = g_variant_ref_sink (collect_values[0].v_pointer);
 
   return NULL;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]