reapack

Package manager for REAPER
Log | Files | Refs | Submodules | README | LICENSE

commit 9b2a1a7455b16714d713eacb8f4733fa0220517c
parent b9fa9885509451ebda813b07fde46f410b1bf15a
Author: cfillion <cfillion@users.noreply.github.com>
Date:   Mon,  6 Feb 2017 00:28:05 -0500

download: fix another use after free of a mutex

it would happen if the notification is processed simultaneously and
deleting the download instance.

and un-protect contents/finish as m_contents will never be
read/written simultaneously; it's written by the thread then only read
after a timer tick

Diffstat:
Msrc/download.cpp | 12++----------
Msrc/download.hpp | 2+-
2 files changed, 3 insertions(+), 11 deletions(-)

diff --git a/src/download.cpp b/src/download.cpp @@ -122,10 +122,9 @@ void Download::setProgress(const short percent) void Download::finish(const State state, const string &contents) { - DownloadNotifier::get()->notify({this, state}); - - WDL_MutexLock lock(&m_mutex); m_contents = contents; + + DownloadNotifier::get()->notify({this, state}); } void Download::setState(const State state) @@ -147,13 +146,6 @@ void Download::setState(const State state) } } -const string &Download::contents() -{ - WDL_MutexLock lock(&m_mutex); - - return m_contents; -} - bool Download::isAborted() { WDL_MutexLock lock(&m_mutex); diff --git a/src/download.hpp b/src/download.hpp @@ -64,7 +64,7 @@ public: void setState(State); State state() const { return m_state; } - const std::string &contents(); + const std::string &contents() { return m_contents; } bool isAborted(); short progress();