[glib/mcatanzaro/#2076: 16/16] gtype: suppress valgrind memory leak warnings




commit fb6e10c959038d8a83dc9f52eb58763d00ece3e5
Author: Michael Catanzaro <mcatanzaro gnome org>
Date:   Mon Nov 23 15:54:08 2020 -0600

    gtype: suppress valgrind memory leak warnings
    
    The problem occurs because we keep a pointer inside the allocated block,
    instead of a pointer to the start of the block. This memory exists for
    the lifetime of the application, so let's silence it.
    
    This is probably abuse of VALGRIND_MALLOCLIKE_BLOCK(), which is really
    intended for use in memory allocators, but gtype.c already uses it in
    two other places, and it's a practical solution. I wrote another larger
    fix for this issue that involves keeping an array of extra pointers when
    running under valgrind. This is simpler.
    
    Fix suggested by Philip Withnall
    
    ```
    ==180238== 16 bytes in 1 blocks are possibly lost in loss record 3,078 of 16,075
    ==180238==    at 0x483BB1A: calloc (vg_replace_malloc.c:762)
    ==180238==    by 0x5489495: g_malloc0 (gmem.c:132)
    ==180238==    by 0x5489754: g_malloc0_n (gmem.c:364)
    ==180238==    by 0x53FDBEE: type_set_qdata_W (gtype.c:3722)
    ==180238==    by 0x53FDEE8: type_add_flags_W (gtype.c:3787)
    ==180238==    by 0x53FC348: g_type_register_fundamental (gtype.c:2662)
    ==180238==    by 0x53D969B: _g_enum_types_init (genums.c:124)
    ==180238==    by 0x53FF058: gobject_init (gtype.c:4432)
    ==180238==    by 0x53FF082: gobject_init_ctor (gtype.c:4493)
    ==180238==    by 0x4010F29: call_init.part.0 (dl-init.c:72)
    ==180238==    by 0x4011030: call_init (dl-init.c:30)
    ==180238==    by 0x4011030: _dl_init (dl-init.c:119)
    ==180238==    by 0x4002149: ??? (in /usr/lib64/ld-2.30.so)
    ```
    
    Fixes #2076

 gobject/gtype.c | 4 ++++
 1 file changed, 4 insertions(+)
---
diff --git a/gobject/gtype.c b/gobject/gtype.c
index 909faf138..69cd27512 100644
--- a/gobject/gtype.c
+++ b/gobject/gtype.c
@@ -442,6 +442,10 @@ type_node_any_new_W (TypeNode             *pnode,
       node = G_STRUCT_MEMBER_P (node, SIZEOF_FUNDAMENTAL_INFO);
       static_fundamental_type_nodes[ftype >> G_TYPE_FUNDAMENTAL_SHIFT] = node;
       type = ftype;
+
+#if ENABLE_VALGRIND
+      VALGRIND_MALLOCLIKE_BLOCK (node, node_size - SIZEOF_FUNDAMENTAL_INFO, FALSE, TRUE);
+#endif
     }
   else
     type = (GType) node;


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