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