threads/157040: valgrind detects leaks in libthr.so.3
Schaich Alonso
alonsoschaich at gmx.de
Sat May 14 11:10:14 UTC 2011
>Number: 157040
>Category: threads
>Synopsis: valgrind detects leaks in libthr.so.3
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-threads
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Sat May 14 11:10:13 UTC 2011
>Closed-Date:
>Last-Modified:
>Originator: Schaich Alonso
>Release: 8.2-RELEASE
>Organization:
>Environment:
FreeBSD tecra 8.2-RELEASE-p1 FreeBSD 8.2-RELEASE-p1 #2: Fri May 13 16:22:22 CEST 2011 root at tecra:/usr/obj/usr/src/sys/GENERIC amd64
>Description:
I'm not certain whether this is a problem with libthr or valgrind, however when linking against libpthread even a hello world program will cause valgrind to "detect" a 392 octet block not being freed. If compiled in C++ mode, it will also report seven other blocks:
==5254== Memcheck, a memory error detector
==5254== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
==5254== Using Valgrind-3.6.1 and LibVEX; rerun with -h for copyright info
==5254== Command: ./a.out
==5254==
==5254==
==5254== HEAP SUMMARY:
==5254== in use at exit: 872 bytes in 7 blocks
==5254== total heap usage: 7 allocs, 0 frees, 872 bytes allocated
==5254==
==5254== 80 bytes in 1 blocks are still reachable in loss record 1 of 7
==5254== at 0x258A04: calloc (in /usr/local/lib/valgrind/vgpreload_memcheck-amd64-freebsd.so)
==5254== by 0xD0D257: ??? (in /lib/libthr.so.3)
==5254== by 0xD0D49B: ??? (in /lib/libthr.so.3)
==5254== by 0xD0DA9F: pthread_mutex_lock (in /lib/libthr.so.3)
==5254== by 0xEE1A4F: ??? (in /usr/lib/libstdc++.so.6)
==5254== by 0xEE2E72: ??? (in /usr/lib/libstdc++.so.6)
==5254== by 0xE678BD: ??? (in /usr/lib/libstdc++.so.6)
==5254== by 0x13E0CF: ??? (in /libexec/ld-elf.so.1)
==5254== by 0x1784E: ??? (in /libexec/ld-elf.so.1)
==5254== by 0x18BB4: ??? (in /libexec/ld-elf.so.1)
==5254== by 0x13758: ??? (in /libexec/ld-elf.so.1)
==5254==
==5254== 80 bytes in 1 blocks are still reachable in loss record 2 of 7
==5254== at 0x258A04: calloc (in /usr/local/lib/valgrind/vgpreload_memcheck-amd64-freebsd.so)
==5254== by 0xD0D257: ??? (in /lib/libthr.so.3)
==5254== by 0xD0D49B: ??? (in /lib/libthr.so.3)
==5254== by 0xD0DA9F: pthread_mutex_lock (in /lib/libthr.so.3)
==5254== by 0xEDD837: ??? (in /usr/lib/libstdc++.so.6)
==5254== by 0xEE2E72: ??? (in /usr/lib/libstdc++.so.6)
==5254== by 0xE678BD: ??? (in /usr/lib/libstdc++.so.6)
==5254== by 0x13E0CF: ??? (in /libexec/ld-elf.so.1)
==5254== by 0x1784E: ??? (in /libexec/ld-elf.so.1)
==5254== by 0x18BB4: ??? (in /libexec/ld-elf.so.1)
==5254== by 0x13758: ??? (in /libexec/ld-elf.so.1)
==5254==
==5254== 80 bytes in 1 blocks are still reachable in loss record 3 of 7
==5254== at 0x258A04: calloc (in /usr/local/lib/valgrind/vgpreload_memcheck-amd64-freebsd.so)
==5254== by 0xD0D257: ??? (in /lib/libthr.so.3)
==5254== by 0xD0D49B: ??? (in /lib/libthr.so.3)
==5254== by 0xD0DA9F: pthread_mutex_lock (in /lib/libthr.so.3)
==5254== by 0xE7CD1B: ??? (in /usr/lib/libstdc++.so.6)
==5254== by 0xEE2E72: ??? (in /usr/lib/libstdc++.so.6)
==5254== by 0xE678BD: ??? (in /usr/lib/libstdc++.so.6)
==5254== by 0x13E0CF: ??? (in /libexec/ld-elf.so.1)
==5254== by 0x1784E: ??? (in /libexec/ld-elf.so.1)
==5254== by 0x18BB4: ??? (in /libexec/ld-elf.so.1)
==5254== by 0x13758: ??? (in /libexec/ld-elf.so.1)
==5254==
==5254== 80 bytes in 1 blocks are still reachable in loss record 4 of 7
==5254== at 0x258A04: calloc (in /usr/local/lib/valgrind/vgpreload_memcheck-amd64-freebsd.so)
==5254== by 0xD0D257: ??? (in /lib/libthr.so.3)
==5254== by 0xD0D49B: ??? (in /lib/libthr.so.3)
==5254== by 0xD0DA9F: pthread_mutex_lock (in /lib/libthr.so.3)
==5254== by 0xE7B2C1: ??? (in /usr/lib/libstdc++.so.6)
==5254== by 0xEE2E72: ??? (in /usr/lib/libstdc++.so.6)
==5254== by 0xE678BD: ??? (in /usr/lib/libstdc++.so.6)
==5254== by 0x13E0CF: ??? (in /libexec/ld-elf.so.1)
==5254== by 0x1784E: ??? (in /libexec/ld-elf.so.1)
==5254== by 0x18BB4: ??? (in /libexec/ld-elf.so.1)
==5254== by 0x13758: ??? (in /libexec/ld-elf.so.1)
==5254==
==5254== 80 bytes in 1 blocks are still reachable in loss record 5 of 7
==5254== at 0x258A04: calloc (in /usr/local/lib/valgrind/vgpreload_memcheck-amd64-freebsd.so)
==5254== by 0xD0D257: ??? (in /lib/libthr.so.3)
==5254== by 0xD0D49B: ??? (in /lib/libthr.so.3)
==5254== by 0xD0DA9F: pthread_mutex_lock (in /lib/libthr.so.3)
==5254== by 0xE78948: ??? (in /usr/lib/libstdc++.so.6)
==5254== by 0xEE2E72: ??? (in /usr/lib/libstdc++.so.6)
==5254== by 0xE678BD: ??? (in /usr/lib/libstdc++.so.6)
==5254== by 0x13E0CF: ??? (in /libexec/ld-elf.so.1)
==5254== by 0x1784E: ??? (in /libexec/ld-elf.so.1)
==5254== by 0x18BB4: ??? (in /libexec/ld-elf.so.1)
==5254== by 0x13758: ??? (in /libexec/ld-elf.so.1)
==5254==
==5254== 80 bytes in 1 blocks are still reachable in loss record 6 of 7
==5254== at 0x258A04: calloc (in /usr/local/lib/valgrind/vgpreload_memcheck-amd64-freebsd.so)
==5254== by 0xD0D257: ??? (in /lib/libthr.so.3)
==5254== by 0xD0D49B: ??? (in /lib/libthr.so.3)
==5254== by 0xD0DA9F: pthread_mutex_lock (in /lib/libthr.so.3)
==5254== by 0xE73F35: ??? (in /usr/lib/libstdc++.so.6)
==5254== by 0xEE2E72: ??? (in /usr/lib/libstdc++.so.6)
==5254== by 0xE678BD: ??? (in /usr/lib/libstdc++.so.6)
==5254== by 0x13E0CF: ??? (in /libexec/ld-elf.so.1)
==5254== by 0x1784E: ??? (in /libexec/ld-elf.so.1)
==5254== by 0x18BB4: ??? (in /libexec/ld-elf.so.1)
==5254== by 0x13758: ??? (in /libexec/ld-elf.so.1)
==5254==
==5254== 392 bytes in 1 blocks are still reachable in loss record 7 of 7
==5254== at 0x259790: malloc (in /usr/local/lib/valgrind/vgpreload_memcheck-amd64-freebsd.so)
==5254== by 0xD0EEFE: ??? (in /lib/libthr.so.3)
==5254== by 0xD0F882: ??? (in /lib/libthr.so.3)
==5254== by 0xD0DA2C: pthread_mutex_lock (in /lib/libthr.so.3)
==5254== by 0xEE1A4F: ??? (in /usr/lib/libstdc++.so.6)
==5254== by 0xEE2E72: ??? (in /usr/lib/libstdc++.so.6)
==5254== by 0xE678BD: ??? (in /usr/lib/libstdc++.so.6)
==5254== by 0x13E0CF: ??? (in /libexec/ld-elf.so.1)
==5254== by 0x1784E: ??? (in /libexec/ld-elf.so.1)
==5254== by 0x18BB4: ??? (in /libexec/ld-elf.so.1)
==5254== by 0x13758: ??? (in /libexec/ld-elf.so.1)
==5254==
==5254== LEAK SUMMARY:
==5254== definitely lost: 0 bytes in 0 blocks
==5254== indirectly lost: 0 bytes in 0 blocks
==5254== possibly lost: 0 bytes in 0 blocks
==5254== still reachable: 872 bytes in 7 blocks
==5254== suppressed: 0 bytes in 0 blocks
==5254==
==5254== For counts of detected and suppressed errors, rerun with: -v
==5254== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
>How-To-Repeat:
write any c programm, e.g.:
>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted:
>#include <stdlib.h>
>
>int main()
>{
> return (EXIT_SUCCESS); >}
>
(test.c)
for little output:
>cc -pthread test.c
>valgrind --leak-check=full --show-reachable=yes ./a.out
for alot output:
>c++ -pthread test.c
>valgrind --leak-check=full --show-reachable=yes ./a.out
More information about the freebsd-threads
mailing list