Blob Blame History Raw
diff -up pygobject-3.8.2/gi/pygi-marshal-cleanup.c.gvalue-memory-leak pygobject-3.8.2/gi/pygi-marshal-cleanup.c
--- pygobject-3.8.2/gi/pygi-marshal-cleanup.c.gvalue-memory-leak	2013-03-04 04:19:22.000000000 -0500
+++ pygobject-3.8.2/gi/pygi-marshal-cleanup.c	2014-09-26 09:04:12.780688672 -0400
@@ -29,16 +29,17 @@ _cleanup_caller_allocates (PyGIInvokeSta
 {
     PyGIInterfaceCache *iface_cache = (PyGIInterfaceCache *)cache;
 
-    if (g_type_is_a (iface_cache->g_type, G_TYPE_BOXED)) {
+    /* check GValue first because GValue is also a boxed sub-type */
+    if (g_type_is_a (iface_cache->g_type, G_TYPE_VALUE)) {
+        if (was_processed)
+            g_value_unset (data);
+        g_slice_free (GValue, data);
+    } else if (g_type_is_a (iface_cache->g_type, G_TYPE_BOXED)) {
         gsize size;
         if (was_processed)
             return; /* will be cleaned up at deallocation */
         size = g_struct_info_get_size (iface_cache->interface_info);
         g_slice_free1 (size, data);
-    } else if (iface_cache->g_type == G_TYPE_VALUE) {
-        if (was_processed)
-            g_value_unset (data);
-        g_slice_free (GValue, data);
     } else if (iface_cache->is_foreign) {
         if (was_processed)
             return; /* will be cleaned up at deallocation */