Merge pull request #8003

75d05b9 download: fix leak (moneromooo-monero)
This commit is contained in:
luigi1111 2021-10-25 18:59:18 -05:00
commit e7d571c526
No known key found for this signature in database
GPG Key ID: F4ACA0183641E010
1 changed files with 9 additions and 1 deletions

View File

@ -53,7 +53,7 @@ namespace tools
download_thread_control(const std::string &path, const std::string &uri, std::function<void(const std::string&, const std::string&, bool)> result_cb, std::function<bool(const std::string&, const std::string&, size_t, ssize_t)> progress_cb): download_thread_control(const std::string &path, const std::string &uri, std::function<void(const std::string&, const std::string&, bool)> result_cb, std::function<bool(const std::string&, const std::string&, size_t, ssize_t)> progress_cb):
path(path), uri(uri), result_cb(result_cb), progress_cb(progress_cb), stop(false), stopped(false), success(false) {} path(path), uri(uri), result_cb(result_cb), progress_cb(progress_cb), stop(false), stopped(false), success(false) {}
~download_thread_control() { if (thread.joinable()) thread.detach(); } ~download_thread_control() { if (thread.joinable()) { thread.detach(); thread = {}; } }
}; };
static void download_thread(download_async_handle control) static void download_thread(download_async_handle control)
@ -293,9 +293,13 @@ namespace tools
{ {
boost::lock_guard<boost::mutex> lock(control->mutex); boost::lock_guard<boost::mutex> lock(control->mutex);
if (control->stopped) if (control->stopped)
{
control->thread = {};
return true; return true;
}
} }
control->thread.join(); control->thread.join();
control->thread = {};
return true; return true;
} }
@ -305,10 +309,14 @@ namespace tools
{ {
boost::lock_guard<boost::mutex> lock(control->mutex); boost::lock_guard<boost::mutex> lock(control->mutex);
if (control->stopped) if (control->stopped)
{
control->thread = {};
return true; return true;
}
control->stop = true; control->stop = true;
} }
control->thread.join(); control->thread.join();
control->thread = {};
return true; return true;
} }
} }