public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug libgomp/36298] New: gomp contains small memoryleak
@ 2008-05-22 7:58 Klaas dot Vantournhout at UGent dot be
2008-05-23 17:03 ` [Bug libgomp/36298] " jakub at gcc dot gnu dot org
0 siblings, 1 reply; 2+ messages in thread
From: Klaas dot Vantournhout at UGent dot be @ 2008-05-22 7:58 UTC (permalink / raw)
To: gcc-bugs
Compiling the following piece of code shows a memoryleak when investigated with
valgrind.
int main() {
#pragma omp parallel for
for (int i = 100; i >= 0; --i) {
}
return 0;
}
Below you find everything you need to know (i think). If something is missing,
let me know.
Regards
Klaas
[klaas@talvin10 openmp]$ g++ -v
Using built-in specs.
Target: x86_64-manbo-linux-gnu
Configured with: ../configure --prefix=/usr --libexecdir=/usr/lib
--with-slibdir=/lib64 --mandir=/usr/share/man --infodir=/usr/share/info
--enable-checking=release
--enable-languages=c,c++,ada,fortran,objc,obj-c++,java
--host=x86_64-manbo-linux-gnu --with-cpu=generic --with-system-zlib
--enable-threads=posix --enable-shared --enable-long-long --enable-__cxa_atexit
--disable-libunwind-exceptions --enable-clocale=gnu --enable-java-awt=gtk
--with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --enable-gtk-cairo
--disable-libjava-multilib --enable-ssp --disable-libssp
Thread model: posix
gcc version 4.2.3 (4.2.3-6mnb1)
[klaas@talvin10 openmp]$ cat memleak.cpp
int main() {
#pragma omp parallel for
for (int i = 100; i >= 0; --i) {
}
return 0;
}
[klaas@talvin10 openmp]$ g++ --openmp memleak.cpp
[klaas@talvin10 openmp]$ valgrind --leak-check=full --show-reachable=yes
./a.out
==11971== Memcheck, a memory error detector.
==11971== Copyright (C) 2002-2007, and GNU GPL'd, by Julian Seward et al.
==11971== Using LibVEX rev 1804, a library for dynamic binary translation.
==11971== Copyright (C) 2004-2007, and GNU GPL'd, by OpenWorks LLP.
==11971== Using valgrind-3.3.0, a dynamic binary instrumentation framework.
==11971== Copyright (C) 2000-2007, and GNU GPL'd, by Julian Seward et al.
==11971== For more details, rerun with: -v
==11971==
==11971==
==11971== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 1)
==11971== malloc/free: in use at exit: 328 bytes in 2 blocks.
==11971== malloc/free: 5 allocs, 3 frees, 1,032 bytes allocated.
==11971== For counts of detected errors, rerun with: -v
==11971== searching for pointers to 2 not-freed blocks.
==11971== checked 8,585,392 bytes.
==11971==
==11971== 24 bytes in 1 blocks are still reachable in loss record 1 of 2
==11971== at 0x4C1ED1B: malloc (in
/usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==11971== by 0x4C1EE64: realloc (in
/usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==11971== by 0x53AB288: (within /usr/lib64/libgomp.so.1.0.0)
==11971== by 0x53AD4A0: (within /usr/lib64/libgomp.so.1.0.0)
==11971== by 0x4006CF: main (in /home/klaas/devel/testing/openmp/a.out)
==11971==
==11971==
==11971== 304 bytes in 1 blocks are possibly lost in loss record 2 of 2
==11971== at 0x4C1DE2C: calloc (in
/usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==11971== by 0x400FE62: _dl_allocate_tls (dl-tls.c:300)
==11971== by 0x57C3B41: pthread_create@@GLIBC_2.2.5 (in
/lib64/libpthread-2.7.so)
==11971== by 0x53AD3BE: (within /usr/lib64/libgomp.so.1.0.0)
==11971== by 0x4006CF: main (in /home/klaas/devel/testing/openmp/a.out)
==11971==
==11971== LEAK SUMMARY:
==11971== definitely lost: 0 bytes in 0 blocks.
==11971== possibly lost: 304 bytes in 1 blocks.
==11971== still reachable: 24 bytes in 1 blocks.
==11971== suppressed: 0 bytes in 0 blocks.
[klaas@talvin10 openmp]$
--
Summary: gomp contains small memoryleak
Product: gcc
Version: 4.2.3
Status: UNCONFIRMED
Severity: major
Priority: P3
Component: libgomp
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: Klaas dot Vantournhout at UGent dot be
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36298
^ permalink raw reply [flat|nested] 2+ messages in thread
* [Bug libgomp/36298] gomp contains small memoryleak
2008-05-22 7:58 [Bug libgomp/36298] New: gomp contains small memoryleak Klaas dot Vantournhout at UGent dot be
@ 2008-05-23 17:03 ` jakub at gcc dot gnu dot org
0 siblings, 0 replies; 2+ messages in thread
From: jakub at gcc dot gnu dot org @ 2008-05-23 17:03 UTC (permalink / raw)
To: gcc-bugs
------- Comment #1 from jakub at gcc dot gnu dot org 2008-05-23 17:03 -------
This is not a memory leak, just misunderstanding what valgrind is reporting.
Memory still reachable at exit time is not a bug, all memory is freed by exit.
Some libraries are instrumented with hooks that at exit time can be called from
memory allocation checker (valgrind, mtrace, ...), e.g. libc, but in some cases
this isn't possible at all and only very few libraries are instrumented that
way.
Memory leak is when something hasn't been freed, but isn't reachable anymore.
The rest are just potential problems that you can analyze.
In libgomp case, most of the allocations still reachable at exit time fall into
the category where they really can't be freed. Remember the requirement
spelled in threadprivate directive description, if the number of threads is the
same between two consecutive parallel regions and two of the ICVs didn't
change, then
threadprivate vars must be preserved. This means a thread pool must be live
whenever there was some parallel region, with the number of threads from the
last parallel region. For that you need some malloced control data structures
and each thread has its TLS allocaed too.
--
jakub at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Keywords| |openmp
Resolution| |INVALID
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36298
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2008-05-23 17:03 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-05-22 7:58 [Bug libgomp/36298] New: gomp contains small memoryleak Klaas dot Vantournhout at UGent dot be
2008-05-23 17:03 ` [Bug libgomp/36298] " jakub at gcc dot gnu dot org
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).