Безопасно ли не вызывать curl_multi_cleanup ()? - PullRequest
0 голосов
/ 24 января 2020

Я читал это: { ссылка } и решил исправить этот код и улучшить его, чтобы можно было использовать его в качестве библиотеки.

Это один из примеров в Веб-страница libcurl: https://curl.haxx.se/libcurl/c/fopen.html

Я обнаружил, что, хотя документация libcurl гласит это, ссылаясь на функцию curl_multi_init():

Этот вызов инициализации ДОЛЖЕН иметь соответствующий вызов curl_multi_cleanup после завершения операции.

пример кода не вызывает его, никогда.

В программе он может было бы легко добавить этот вызов в конце основного, но для библиотеки труднее (или, возможно, невозможно) узнать, можно ли очистить мульти дескриптор. Допустимо ли опускать вызов?

Я полагаю, что это утечка памяти, но не очень большая, и это только один раз, и я не знаю, как ее избежать.


Можно ли написать функцию __attribute__((destructor)) url_deinit(), чтобы, если пользователь забудет ее вызвать, она все равно будет вызвана, или ресурсы уже будут уничтожены в этот момент и вызовут UB?

1 Ответ

1 голос
/ 25 января 2020

Если вы никогда не очистите его, вы никогда не получите «назад» память и ресурсы, которые выделены относительно этого дескриптора.

В примере fopen. c мульти дескриптор является глобальным и используется повторно и действительно никогда не освобождается. Это нормально, если у вас ничего не получится вернуть память.

Когда ваша программа завершит работу, вся память и ресурсы будут все равно освобождены принудительно.

...