bug-gnulib@gnu.org mirror (unofficial)
 help / color / mirror / Atom feed
From: Bruno Haible <bruno@clisp.org>
To: bug-gnulib@gnu.org, Akim Demaille <akim@lrde.epita.fr>
Subject: memory leak in bitset
Date: Sun, 10 Mar 2019 14:27:46 +0100	[thread overview]
Message-ID: <3358120.AJ6TtyeLkd@omega> (raw)

Hi Akim,

There is apparently a memory leak in the 'bitset' module. After I modified
'test-bitset.c' to free the allocated bitsets, "gcc -fsanitize=leak" and
valgrind still report lost memory allocations.


"gcc -fsanitize=leak" reports:

ERROR: LeakSanitizer: detected memory leaks

Direct leak of 376 byte(s) in 27 object(s) allocated from:
    #0 0x7ff0f00179d4 in __interceptor_realloc ../../../../gcc-8.2.0/libsanitizer/lsan/lsan_interceptors.cc:80
    #1 0x40b3d8 in vbitset_resize ../../gllib/bitset/vector.c:77

SUMMARY: LeakSanitizer: 376 byte(s) leaked in 27 allocation(s).
FAIL test-bitset (exit status: 23)


valgrind reports:

==8212== HEAP SUMMARY:
==8212==     in use at exit: 8,504 bytes in 29 blocks
==8212==   total heap usage: 140 allocs, 111 frees, 13,920 bytes allocated
==8212== 
==8212== 8 bytes in 1 blocks are definitely lost in loss record 1 of 29
==8212==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x4C2FDEF: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x40B7F8: vbitset_resize (vector.c:77)
==8212==    by 0x40C66F: vbitset_init (vector.c:983)
==8212==    by 0x4014A8: check_attributes (test-bitset.c:134)
==8212==    by 0x400BE7: main (test-bitset.c:172)
==8212== 
==8212== 8 bytes in 1 blocks are definitely lost in loss record 2 of 29
==8212==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x4C2FDEF: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x40B7F8: vbitset_resize (vector.c:77)
==8212==    by 0x40C66F: vbitset_init (vector.c:983)
==8212==    by 0x4014F0: check_attributes (test-bitset.c:139)
==8212==    by 0x400BE7: main (test-bitset.c:172)
==8212== 
==8212== 8 bytes in 1 blocks are definitely lost in loss record 3 of 29
==8212==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x4C2FDEF: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x40B7F8: vbitset_resize (vector.c:77)
==8212==    by 0x40C66F: vbitset_init (vector.c:983)
==8212==    by 0x401572: check_attributes (test-bitset.c:146)
==8212==    by 0x400BE7: main (test-bitset.c:172)
==8212== 
==8212== 8 bytes in 1 blocks are definitely lost in loss record 4 of 29
==8212==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x4C2FDEF: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x40B7F8: vbitset_resize (vector.c:77)
==8212==    by 0x40C66F: vbitset_init (vector.c:983)
==8212==    by 0x4015E5: check_attributes (test-bitset.c:155)
==8212==    by 0x400BE7: main (test-bitset.c:172)
==8212== 
==8212== 8 bytes in 1 blocks are definitely lost in loss record 5 of 29
==8212==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x4C2FDEF: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x40B7F8: vbitset_resize (vector.c:77)
==8212==    by 0x40C66F: vbitset_init (vector.c:983)
==8212==    by 0x4014A8: check_attributes (test-bitset.c:134)
==8212==    by 0x400BF1: main (test-bitset.c:173)
==8212== 
==8212== 8 bytes in 1 blocks are definitely lost in loss record 6 of 29
==8212==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x4C2FDEF: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x40B7F8: vbitset_resize (vector.c:77)
==8212==    by 0x40C66F: vbitset_init (vector.c:983)
==8212==    by 0x4014F0: check_attributes (test-bitset.c:139)
==8212==    by 0x400BF1: main (test-bitset.c:173)
==8212== 
==8212== 8 bytes in 1 blocks are definitely lost in loss record 7 of 29
==8212==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x4C2FDEF: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x40B7F8: vbitset_resize (vector.c:77)
==8212==    by 0x40C66F: vbitset_init (vector.c:983)
==8212==    by 0x401572: check_attributes (test-bitset.c:146)
==8212==    by 0x400BF1: main (test-bitset.c:173)
==8212== 
==8212== 8 bytes in 1 blocks are definitely lost in loss record 8 of 29
==8212==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x4C2FDEF: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x40B7F8: vbitset_resize (vector.c:77)
==8212==    by 0x40C66F: vbitset_init (vector.c:983)
==8212==    by 0x4015E5: check_attributes (test-bitset.c:155)
==8212==    by 0x400BF1: main (test-bitset.c:173)
==8212== 
==8212== 8 bytes in 1 blocks are definitely lost in loss record 9 of 29
==8212==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x4C2FDEF: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x40B7F8: vbitset_resize (vector.c:77)
==8212==    by 0x40C66F: vbitset_init (vector.c:983)
==8212==    by 0x4014A8: check_attributes (test-bitset.c:134)
==8212==    by 0x400C05: main (test-bitset.c:175)
==8212== 
==8212== 8 bytes in 1 blocks are definitely lost in loss record 10 of 29
==8212==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x4C2FDEF: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x40B7F8: vbitset_resize (vector.c:77)
==8212==    by 0x40C66F: vbitset_init (vector.c:983)
==8212==    by 0x4014F0: check_attributes (test-bitset.c:139)
==8212==    by 0x400C05: main (test-bitset.c:175)
==8212== 
==8212== 8 bytes in 1 blocks are definitely lost in loss record 11 of 29
==8212==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x4C2FDEF: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x40B7F8: vbitset_resize (vector.c:77)
==8212==    by 0x40C66F: vbitset_init (vector.c:983)
==8212==    by 0x401572: check_attributes (test-bitset.c:146)
==8212==    by 0x400C05: main (test-bitset.c:175)
==8212== 
==8212== 8 bytes in 1 blocks are definitely lost in loss record 12 of 29
==8212==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x4C2FDEF: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x40B7F8: vbitset_resize (vector.c:77)
==8212==    by 0x40C66F: vbitset_init (vector.c:983)
==8212==    by 0x4015E5: check_attributes (test-bitset.c:155)
==8212==    by 0x400C05: main (test-bitset.c:175)
==8212== 
==8212== 16 bytes in 1 blocks are definitely lost in loss record 13 of 29
==8212==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x4C2FDEF: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x40B7F8: vbitset_resize (vector.c:77)
==8212==    by 0x40C66F: vbitset_init (vector.c:983)
==8212==    by 0x400FA9: compare (test-bitset.c:55)
==8212==    by 0x400C2D: main (test-bitset.c:179)
==8212== 
==8212== 16 bytes in 1 blocks are definitely lost in loss record 14 of 29
==8212==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x4C2FDEF: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x40B7F8: vbitset_resize (vector.c:77)
==8212==    by 0x40C66F: vbitset_init (vector.c:983)
==8212==    by 0x400FC3: compare (test-bitset.c:57)
==8212==    by 0x400C2D: main (test-bitset.c:179)
==8212== 
==8212== 16 bytes in 1 blocks are definitely lost in loss record 15 of 29
==8212==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x4C2FDEF: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x40B7F8: vbitset_resize (vector.c:77)
==8212==    by 0x40C66F: vbitset_init (vector.c:983)
==8212==    by 0x400FE2: compare (test-bitset.c:59)
==8212==    by 0x400C2D: main (test-bitset.c:179)
==8212== 
==8212== 16 bytes in 1 blocks are definitely lost in loss record 16 of 29
==8212==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x4C2FDEF: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x40B7F8: vbitset_resize (vector.c:77)
==8212==    by 0x40C66F: vbitset_init (vector.c:983)
==8212==    by 0x401003: compare (test-bitset.c:61)
==8212==    by 0x400C2D: main (test-bitset.c:179)
==8212== 
==8212== 16 bytes in 1 blocks are definitely lost in loss record 17 of 29
==8212==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x4C2FDEF: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x40B7F8: vbitset_resize (vector.c:77)
==8212==    by 0x40C66F: vbitset_init (vector.c:983)
==8212==    by 0x401024: compare (test-bitset.c:63)
==8212==    by 0x400C2D: main (test-bitset.c:179)
==8212== 
==8212== 16 bytes in 1 blocks are definitely lost in loss record 18 of 29
==8212==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x4C2FDEF: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x40B7F8: vbitset_resize (vector.c:77)
==8212==    by 0x40C66F: vbitset_init (vector.c:983)
==8212==    by 0x400FA9: compare (test-bitset.c:55)
==8212==    by 0x400C3C: main (test-bitset.c:180)
==8212== 
==8212== 16 bytes in 1 blocks are definitely lost in loss record 19 of 29
==8212==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x4C2FDEF: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x40B7F8: vbitset_resize (vector.c:77)
==8212==    by 0x40C66F: vbitset_init (vector.c:983)
==8212==    by 0x400FC3: compare (test-bitset.c:57)
==8212==    by 0x400C3C: main (test-bitset.c:180)
==8212== 
==8212== 16 bytes in 1 blocks are definitely lost in loss record 20 of 29
==8212==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x4C2FDEF: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x40B7F8: vbitset_resize (vector.c:77)
==8212==    by 0x40C66F: vbitset_init (vector.c:983)
==8212==    by 0x400FE2: compare (test-bitset.c:59)
==8212==    by 0x400C3C: main (test-bitset.c:180)
==8212== 
==8212== 16 bytes in 1 blocks are definitely lost in loss record 21 of 29
==8212==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x4C2FDEF: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x40B7F8: vbitset_resize (vector.c:77)
==8212==    by 0x40C66F: vbitset_init (vector.c:983)
==8212==    by 0x401003: compare (test-bitset.c:61)
==8212==    by 0x400C3C: main (test-bitset.c:180)
==8212== 
==8212== 16 bytes in 1 blocks are definitely lost in loss record 22 of 29
==8212==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x4C2FDEF: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x40B7F8: vbitset_resize (vector.c:77)
==8212==    by 0x40C66F: vbitset_init (vector.c:983)
==8212==    by 0x401024: compare (test-bitset.c:63)
==8212==    by 0x400C3C: main (test-bitset.c:180)
==8212== 
==8212== 24 bytes in 1 blocks are definitely lost in loss record 23 of 29
==8212==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x4C2FDEF: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x40B7F8: vbitset_resize (vector.c:77)
==8212==    by 0x40C66F: vbitset_init (vector.c:983)
==8212==    by 0x400FA9: compare (test-bitset.c:55)
==8212==    by 0x400C5A: main (test-bitset.c:182)
==8212== 
==8212== 24 bytes in 1 blocks are definitely lost in loss record 24 of 29
==8212==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x4C2FDEF: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x40B7F8: vbitset_resize (vector.c:77)
==8212==    by 0x40C66F: vbitset_init (vector.c:983)
==8212==    by 0x400FC3: compare (test-bitset.c:57)
==8212==    by 0x400C5A: main (test-bitset.c:182)
==8212== 
==8212== 24 bytes in 1 blocks are definitely lost in loss record 25 of 29
==8212==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x4C2FDEF: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x40B7F8: vbitset_resize (vector.c:77)
==8212==    by 0x40C66F: vbitset_init (vector.c:983)
==8212==    by 0x400FE2: compare (test-bitset.c:59)
==8212==    by 0x400C5A: main (test-bitset.c:182)
==8212== 
==8212== 24 bytes in 1 blocks are definitely lost in loss record 26 of 29
==8212==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x4C2FDEF: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x40B7F8: vbitset_resize (vector.c:77)
==8212==    by 0x40C66F: vbitset_init (vector.c:983)
==8212==    by 0x401003: compare (test-bitset.c:61)
==8212==    by 0x400C5A: main (test-bitset.c:182)
==8212== 
==8212== 24 bytes in 1 blocks are definitely lost in loss record 27 of 29
==8212==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x4C2FDEF: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x40B7F8: vbitset_resize (vector.c:77)
==8212==    by 0x40C66F: vbitset_init (vector.c:983)
==8212==    by 0x401024: compare (test-bitset.c:63)
==8212==    by 0x400C5A: main (test-bitset.c:182)
==8212== 
==8212== 4,064 bytes in 1 blocks are still reachable in loss record 28 of 29
==8212==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x40C688: xmalloc (xmalloc.c:41)
==8212==    by 0x40C9AF: _obstack_begin_worker (obstack.c:136)
==8212==    by 0x408121: lbitset_elt_alloc (list.c:129)
==8212==    by 0x408121: lbitset_elt_calloc (list.c:149)
==8212==    by 0x408121: lbitset_elt_find (list.c:366)
==8212==    by 0x4081ED: lbitset_set (list.c:503)
==8212==    by 0x40166C: bitset_set (bitset.h:143)
==8212==    by 0x40166C: check_attributes (test-bitset.c:140)
==8212==    by 0x400BFB: main (test-bitset.c:174)
==8212== 
==8212== 4,064 bytes in 1 blocks are still reachable in loss record 29 of 29
==8212==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8212==    by 0x40C688: xmalloc (xmalloc.c:41)
==8212==    by 0x40C9AF: _obstack_begin_worker (obstack.c:136)
==8212==    by 0x4054C1: tbitset_elt_alloc (table.c:208)
==8212==    by 0x4054C1: tbitset_elt_calloc (table.c:228)
==8212==    by 0x4054C1: tbitset_elt_find (table.c:311)
==8212==    by 0x405775: tbitset_set (table.c:474)
==8212==    by 0x40166C: bitset_set (bitset.h:143)
==8212==    by 0x40166C: check_attributes (test-bitset.c:140)
==8212==    by 0x400C0F: main (test-bitset.c:176)
==8212== 
==8212== LEAK SUMMARY:
==8212==    definitely lost: 376 bytes in 27 blocks
==8212==    indirectly lost: 0 bytes in 0 blocks
==8212==      possibly lost: 0 bytes in 0 blocks
==8212==    still reachable: 8,128 bytes in 2 blocks
==8212==         suppressed: 0 bytes in 0 blocks
==8212== 
==8212== For counts of detected and suppressed errors, rerun with: -v
==8212== ERROR SUMMARY: 27 errors from 27 contexts (suppressed: 0 from 0)


Bruno



             reply	other threads:[~2019-03-10 13:28 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-10 13:27 Bruno Haible [this message]
2019-03-19 20:45 ` memory leak in bitset Akim Demaille

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://lists.gnu.org/mailman/listinfo/bug-gnulib

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3358120.AJ6TtyeLkd@omega \
    --to=bruno@clisp.org \
    --cc=akim@lrde.epita.fr \
    --cc=bug-gnulib@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).