diff options
author | moneromooo-monero <moneromooo-monero@users.noreply.github.com> | 2021-10-10 19:13:50 +0000 |
---|---|---|
committer | moneromooo-monero <moneromooo-monero@users.noreply.github.com> | 2021-10-10 19:14:17 +0000 |
commit | 75d05b94488302df910159cf58afaf3cac60fd0c (patch) | |
tree | 4ff188da662cd7e9a09fec1f93ec7185989cb5a4 /src | |
parent | Merge pull request #7984 (diff) | |
download | monero-75d05b94488302df910159cf58afaf3cac60fd0c.tar.xz |
download: fix leak
A shared_ptr as by value capture will keep the object alive
Diffstat (limited to 'src')
-rw-r--r-- | src/common/download.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/common/download.cpp b/src/common/download.cpp index 3dd9c3976..c3dfa43d5 100644 --- a/src/common/download.cpp +++ b/src/common/download.cpp @@ -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): 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) @@ -293,9 +293,13 @@ namespace tools { boost::lock_guard<boost::mutex> lock(control->mutex); if (control->stopped) + { + control->thread = {}; return true; + } } control->thread.join(); + control->thread = {}; return true; } @@ -305,10 +309,14 @@ namespace tools { boost::lock_guard<boost::mutex> lock(control->mutex); if (control->stopped) + { + control->thread = {}; return true; + } control->stop = true; } control->thread.join(); + control->thread = {}; return true; } } |