[glib] Don't set a va marshaller if a marshaller was set



commit ef16cbee5bfb4378ca40a2e034c66539f222b22a
Author: Matthias Clasen <mclasen redhat com>
Date:   Thu Jul 28 08:51:17 2016 -0400

    Don't set a va marshaller if a marshaller was set
    
    Otherwise we get warnings when the caller later tries to set a
    va marshaller with g_signal_set_va_marshaller.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=769076

 gobject/gsignal.c |   14 ++++++++++----
 1 files changed, 10 insertions(+), 4 deletions(-)
---
diff --git a/gobject/gsignal.c b/gobject/gsignal.c
index 03fe09f..26283e0 100644
--- a/gobject/gsignal.c
+++ b/gobject/gsignal.c
@@ -1628,6 +1628,7 @@ g_signal_newv (const gchar       *signal_name,
   guint signal_id, i;
   SignalNode *node;
   GSignalCMarshaller builtin_c_marshaller;
+  GSignalCVaMarshaller builtin_va_marshaller;
   GSignalCVaMarshaller va_marshaller;
   
   g_return_val_if_fail (signal_name != NULL, 0);
@@ -1736,14 +1737,14 @@ g_signal_newv (const gchar       *signal_name,
     node->accumulator = NULL;
 
   builtin_c_marshaller = NULL;
-  va_marshaller = NULL;
+  builtin_va_marshaller = NULL;
 
   /* Pick up built-in va marshallers for standard types, and
      instead of generic marshaller if no marshaller specified */
   if (n_params == 0 && return_type == G_TYPE_NONE)
     {
       builtin_c_marshaller = g_cclosure_marshal_VOID__VOID;
-      va_marshaller = g_cclosure_marshal_VOID__VOIDv;
+      builtin_va_marshaller = g_cclosure_marshal_VOID__VOIDv;
     }
   else if (n_params == 1 && return_type == G_TYPE_NONE)
     {
@@ -1751,7 +1752,7 @@ g_signal_newv (const gchar       *signal_name,
       else if (g_type_is_a (param_types[0] & ~G_SIGNAL_TYPE_STATIC_SCOPE, G_TYPE_ ##__type__))         \
        {                                                                \
          builtin_c_marshaller = g_cclosure_marshal_VOID__ ## __type__;  \
-         va_marshaller = g_cclosure_marshal_VOID__ ## __type__ ##v;     \
+         builtin_va_marshaller = g_cclosure_marshal_VOID__ ## __type__ ##v;     \
        }
 
       if (0) {}
@@ -1777,13 +1778,18 @@ g_signal_newv (const gchar       *signal_name,
   if (c_marshaller == NULL)
     {
       if (builtin_c_marshaller)
-       c_marshaller = builtin_c_marshaller;
+        {
+         c_marshaller = builtin_c_marshaller;
+          va_marshaller = builtin_va_marshaller;
+        }
       else
        {
          c_marshaller = g_cclosure_marshal_generic;
          va_marshaller = g_cclosure_marshal_generic_va;
        }
     }
+  else
+    va_marshaller = NULL;
 
   node->c_marshaller = c_marshaller;
   node->va_marshaller = va_marshaller;


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