A proc se v momente, kdy to je vytuhle, nepodivas pomoci GDB, na cem to visi v tom libssh?
Asi proto, že mě to buď nenapadne nebo to neumim :-)
Dneska jsem ale trošku pokročil a zaměřil se na ten valgrind. Možná se mi povedlo najít kde mám chybu, ale ještě si tím nejsem úplně jistej. Musí to běžět docela dlouho, aby to vyplivlo nějaká smysluplná data ve kterých jsem schopen něco najít.
Zdá se, že skutečně špatně pracuji s pamětí což ti chytřejší asi tušili hned. Pokud se z nějakého důvodu rozhodnu navázanou session ukončit tak volám funkci
ssh_disconnect(session);
Toto sice session uzavře, ale neuvolňuje to paměť kterou přiřadila funkce
session = ssh_new();
. Pravděpodobně je po tomto nutné zavolat ještě funkci
ssh_free(session);
Toto mi v celém kódu unikalo a důsledky jsou asi zřejmé. Je zvláštní, že mi ten program sám od sebe vůbec nepadá a jen zatuhne.
Pokud se mi povede ještě ukončit ten accept, bude to ještě lepší, protože pak budu schopen celý příjem SSH korektně ukončit včetně vlákna ve kterém to běží. V tuhle chvíli, když to zastavím natvrdo tak valgrind stále hlásí možný únik což je pořád nějaké varování. Předpokládám, že správný výsledek je když jsou detekované nulové možné i skutečné úniky.