Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Memory leak while loading external library? #2042

Closed
elpres opened this issue Jan 30, 2015 · 2 comments
Closed

Memory leak while loading external library? #2042

elpres opened this issue Jan 30, 2015 · 2 comments

Comments

@elpres
Copy link
Contributor

elpres commented Jan 30, 2015

Here is the code:

when defined(windows):
  const libz = "zlib1.dll"
elif defined(macosx):
  const libz = "libz.dylib"
else:
  const libz = "libz.so.1"

type
  GzFile* = pointer

proc gzopen*(path: cstring, mode: cstring): GzFile{.cdecl, dynlib: libz, importc: "gzopen".}
proc gzclose*(thefile: GzFile) {.cdecl, dynlib: libz, importc: "gzclose".}

when isMainModule:
  let infile = gzopen("test.txt.gz", "rb")
  infile.gzclose

And the valgrind log:

% valgrind --leak-check=full --show-leak-kinds=all ./gzip
==6214== Memcheck, a memory error detector
==6214== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==6214== Using Valgrind-3.10.1 and LibVEX; rerun with -h for copyright info
==6214== Command: ./gzip
==6214== 
==6214== 
==6214== HEAP SUMMARY:
==6214==     in use at exit: 1,624 bytes in 4 blocks
==6214==   total heap usage: 7 allocs, 3 frees, 1,924 bytes allocated
==6214== 
==6214== 19 bytes in 1 blocks are still reachable in loss record 1 of 4
==6214==    at 0x4C29F90: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==6214==    by 0x4005419: local_strdup (in /usr/lib/ld-2.20.so)
==6214==    by 0x400879E: _dl_map_object (in /usr/lib/ld-2.20.so)
==6214==    by 0x40134C2: dl_open_worker (in /usr/lib/ld-2.20.so)
==6214==    by 0x400F0F3: _dl_catch_error (in /usr/lib/ld-2.20.so)
==6214==    by 0x4012E92: _dl_open (in /usr/lib/ld-2.20.so)
==6214==    by 0x4E37038: ??? (in /usr/lib/libdl-2.20.so)
==6214==    by 0x400F0F3: _dl_catch_error (in /usr/lib/ld-2.20.so)
==6214==    by 0x4E37608: ??? (in /usr/lib/libdl-2.20.so)
==6214==    by 0x4E370D0: dlopen (in /usr/lib/libdl-2.20.so)
==6214==    by 0x410EEC: nimLoadLibrary (in /home/elpres/Code/nim/illumina/gzip)
==6214==    by 0x41D9F5: gzipDatInit (in /home/elpres/Code/nim/illumina/gzip)
==6214== 
==6214== 19 bytes in 1 blocks are still reachable in loss record 2 of 4
==6214==    at 0x4C29F90: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==6214==    by 0x400B24F: _dl_new_object (in /usr/lib/ld-2.20.so)
==6214==    by 0x4006303: _dl_map_object_from_fd (in /usr/lib/ld-2.20.so)
==6214==    by 0x400861B: _dl_map_object (in /usr/lib/ld-2.20.so)
==6214==    by 0x40134C2: dl_open_worker (in /usr/lib/ld-2.20.so)
==6214==    by 0x400F0F3: _dl_catch_error (in /usr/lib/ld-2.20.so)
==6214==    by 0x4012E92: _dl_open (in /usr/lib/ld-2.20.so)
==6214==    by 0x4E37038: ??? (in /usr/lib/libdl-2.20.so)
==6214==    by 0x400F0F3: _dl_catch_error (in /usr/lib/ld-2.20.so)
==6214==    by 0x4E37608: ??? (in /usr/lib/libdl-2.20.so)
==6214==    by 0x4E370D0: dlopen (in /usr/lib/libdl-2.20.so)
==6214==    by 0x410EEC: nimLoadLibrary (in /home/elpres/Code/nim/illumina/gzip)
==6214== 
==6214== 408 bytes in 1 blocks are still reachable in loss record 3 of 4
==6214==    at 0x4C2C080: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==6214==    by 0x40109DD: _dl_check_map_versions (in /usr/lib/ld-2.20.so)
==6214==    by 0x4013A29: dl_open_worker (in /usr/lib/ld-2.20.so)
==6214==    by 0x400F0F3: _dl_catch_error (in /usr/lib/ld-2.20.so)
==6214==    by 0x4012E92: _dl_open (in /usr/lib/ld-2.20.so)
==6214==    by 0x4E37038: ??? (in /usr/lib/libdl-2.20.so)
==6214==    by 0x400F0F3: _dl_catch_error (in /usr/lib/ld-2.20.so)
==6214==    by 0x4E37608: ??? (in /usr/lib/libdl-2.20.so)
==6214==    by 0x4E370D0: dlopen (in /usr/lib/libdl-2.20.so)
==6214==    by 0x410EEC: nimLoadLibrary (in /home/elpres/Code/nim/illumina/gzip)
==6214==    by 0x41D9F5: gzipDatInit (in /home/elpres/Code/nim/illumina/gzip)
==6214==    by 0x41D81C: PreMainInner (in /home/elpres/Code/nim/illumina/gzip)
==6214== 
==6214== 1,178 bytes in 1 blocks are still reachable in loss record 4 of 4
==6214==    at 0x4C2C080: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==6214==    by 0x400AF36: _dl_new_object (in /usr/lib/ld-2.20.so)
==6214==    by 0x4006303: _dl_map_object_from_fd (in /usr/lib/ld-2.20.so)
==6214==    by 0x400861B: _dl_map_object (in /usr/lib/ld-2.20.so)
==6214==    by 0x40134C2: dl_open_worker (in /usr/lib/ld-2.20.so)
==6214==    by 0x400F0F3: _dl_catch_error (in /usr/lib/ld-2.20.so)
==6214==    by 0x4012E92: _dl_open (in /usr/lib/ld-2.20.so)
==6214==    by 0x4E37038: ??? (in /usr/lib/libdl-2.20.so)
==6214==    by 0x400F0F3: _dl_catch_error (in /usr/lib/ld-2.20.so)
==6214==    by 0x4E37608: ??? (in /usr/lib/libdl-2.20.so)
==6214==    by 0x4E370D0: dlopen (in /usr/lib/libdl-2.20.so)
==6214==    by 0x410EEC: nimLoadLibrary (in /home/elpres/Code/nim/illumina/gzip)
==6214== 
==6214== LEAK SUMMARY:
==6214==    definitely lost: 0 bytes in 0 blocks
==6214==    indirectly lost: 0 bytes in 0 blocks
==6214==      possibly lost: 0 bytes in 0 blocks
==6214==    still reachable: 1,624 bytes in 4 blocks
==6214==         suppressed: 0 bytes in 0 blocks
==6214== 
==6214== For counts of detected and suppressed errors, rerun with: -v
==6214== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
@zielmicha
Copy link
Contributor

Leaking memory when loading dynamic libraries is not harmful - they are going to be loaded only once per process lifetime.

@Araq
Copy link
Member

Araq commented Jan 31, 2015

And apart from that Valgrind doesn't know anything about Nim's memory manager.

@Araq Araq closed this as completed Jan 31, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants