Date: Mon, 4 Apr 2005 15:36:02 +0300 (EEST) From: Kimmo Mustonen <tzimmo@rommon.com> To: FreeBSD-gnats-submit@FreeBSD.org Subject: threads/79526: A memory leak in pthread_rwlock_init() Message-ID: <200504041236.j34Ca2JB002333@i2-138.rommon.fi> Resent-Message-ID: <200504041240.j34CeCoV029083@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 79526 >Category: threads >Synopsis: A memory leak in pthread_rwlock_init() >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: Mon Apr 04 12:40:12 GMT 2005 >Closed-Date: >Last-Modified: >Originator: Kimmo Mustonen >Release: FreeBSD 5.3-RELEASE-p6 i386 >Organization: ROMmon Oy >Environment: System: FreeBSD tzimmopassive.rommon.fi 5.3-RELEASE-p6 FreeBSD 5.3-RELEASE-p6 #10: Thu Mar 31 14:43:05 EEST 2005 root@tzimmopassive.rommon.fi:/usr/src/sys/i386/compile/ROMMON-PROBE5 i386 Pentium 4, FreeBSD 5.3, i386, pthread >Description: Calling pthread_rwlock_init() leaks memory each time it is called. Example code ---8<---8<--- #include <pthread.h> /* start using valgrind: valgrind --tool=memcheck -v --leak-check=yes --show-reachable=yes \ --num-callers=100 ./leak_pthread_1 */ int main(void) { int i; pthread_rwlock_t lock; for (i = 0; i < 100; i++) { pthread_rwlock_init(&lock, NULL); pthread_rwlock_destroy(&lock); } return 0; } ---8<---8<--- and valgrind report ---8<---8<--- ==801== 2012 bytes in 301 blocks are still reachable in loss record 1 of 1 ==801== at 0x3C033183: malloc (in /usr/local/lib/valgrind/vgpreload_memcheck.so) ==801== by 0x3C03A8D0: (within /usr/local/lib/valgrind/libpthread.so.1) ==801== by 0x3C03BF49: pthread_mutex_init (in /usr/local/lib/valgrind/libpthread.so.1) ==801== by 0x3C03BFA9: pthread_mutex_lock (in /usr/local/lib/valgrind/libpthread.so.1) ==801== by 0x3C03F174: (within /usr/local/lib/valgrind/libpthread.so.1) ==801== by 0x3C03F2D9: pthread_rwlock_init (in /usr/local/lib/valgrind/libpthread.so.1) ==801== by 0x8048609: main (leak_pthread_1.c:14) ==801== ---8<---8<--- >How-To-Repeat: Run the example code using valgrind. >Fix: Haven't looked at the sources, but probably easy to fix. I suppose pthread_rwlock_destroy() just does not free all the resources pthread_rwlock_init() allocates. >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200504041236.j34Ca2JB002333>