Frage

Ich verwende getpwnam_r Client-Verbindungen in meinen Programmen zu behandeln. Traurig genug, so scheint es, einen Puffer zu verteilen es nie befreit. Die entsprechende valgrind Ausgabe:


==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.

Ise es eine Möglichkeit, getpwnam_r zu sagen, zu veröffentlichen, es ist Puffer? Oder muss ich diese Valgrind Fehler zu unterdrücken?

Danke, Kasper

War es hilfreich?

Lösung

Der Speicher ist nicht wirklich für getpwnam speziell zugeordnet. Vielmehr stellt er die Konfiguration von /etc/nsswitch.conf. AFAICT, der einzige Weg, libc Release zu haben, dieser Speicher ist durch Aufruf __libc_freeres:

extern void __libc_freeres (void);

Dies soll den gesamten Speicher freizugeben, die die C-Bibliothek auf hält (nicht nur der Speicher NSS hält sich an).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top