winsoft666 / zoe

C++ File Download Library.
GNU General Public License v3.0
37 stars 12 forks source link

疑问:关于slice的清理curl_multi_remove_handle #14

Closed xiaosongmao123 closed 3 years ago

xiaosongmao123 commented 3 years ago

看的不是太仔细,没找到清理,所以问一下

  1. 创建了一堆slice
  2. slice::start 把这个slice的curl_添加到multi下载curl_multi_add_handle
  3. 当fetchUsefulSlice时,检测到已下载成功的,就slice::stop 从multi移除+清理 curl_multi_remove_handle + curl_easy_cleanup

问1. asyncTaskProcess里multi

EntryHandler::asyncTaskProcess() 217行 multi = curl_multi_init();

multi_最后没有调用curl_multi_cleanup进行清理?

问2.slice里curl_

slice::stop确实清理了curl 但是,只有判断下载成功的slice才触发stop().那么那些下载失败的slice里面的curl,没有清理(curl_multi_remove_handle+curl_easy_cleanup)?

帮我捋一下,告诉我问1和问2是怎么清理的

xiaosongmao123 commented 3 years ago

我是感觉应该在 entryhandler.cpp::389 行 OutputVerbose(options->verbose_functor, "[teemo] Downloading end.\n"); 下面,

  1. 遍历所有slice,检查curl_!=nullptr的,清理一遍curl_multi_remove_handle+curl_easy_cleanup
  2. curl_multicleanup(multi
winsoft666 commented 3 years ago

实际上是BUG,目前已经修复。