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:
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();