fuite de mémoire getpwnam_r

J’utilise getpwnam_r pour gérer les connexions client dans mes programmes. Malheureusement, il semble allouer un tampon qu’il ne libère jamais. La sortie valgrind pertinente:

==15774== 536 (104 direct, 432 indirect) bytes in 2 blocks are definitely lost in loss record 1 of 3 ==15774== at 0x4C24CFE: malloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so) ==15774== by 0x5143B5A: nss_parse_service_list (in /lib64/libc-2.10.1.so) ==15774== by 0x51442E6: __nss_database_lookup (in /lib64/libc-2.10.1.so) ==15774== by 0x57BE35F: ??? ==15774== by 0x57BF3F6: ??? ==15774== by 0x51014D2: getpwnam_r@@GLIBC_2.2.5 (in /lib64/libc-2.10.1.so) ==15774== by 0x407906: dopass (auth.c:71) ==15774== by 0x40393E: do_cmd (command.c:127) ==15774== by 0x402496: ftp_main (server.c:58) ==15774== by 0x40224C: handle_client (daemon.c:211) ==15774== by 0x402073: daemon_main (daemon.c:123) ==15774== by 0x4043CC: main (main.c:48) ==15774== ==15774== LEAK SUMMARY: ==15774== definitely lost: 104 bytes in 2 blocks. ==15774== indirectly lost: 432 bytes in 18 blocks. ==15774== possibly lost: 0 bytes in 0 blocks. ==15774== still reachable: 0 bytes in 0 blocks. ==15774== suppressed: 0 bytes in 0 blocks. 

Y a-t-il un moyen de dire à getpwnam_r de libérer ses tampons? Ou devrais-je supprimer ces erreurs Valgrind?

Merci Kasper

La mémoire n’est pas vraiment allouée à getpwnam en particulier. Au lieu de cela, il représente la configuration de /etc/nsswitch.conf . AFAICT, le seul moyen pour que libc libère cette mémoire consiste à appeler __libc_freeres :

 extern void __libc_freeres (void); 

Ceci est supposé libérer toute la mémoire sur laquelle la bibliothèque C est conservée (pas seulement la mémoire sur NSS).