[vlc-devel] [PATCH 1/2] adaptive: downloader: C++ify mutex usage
Alexandre Janniaux
ajanni at videolabs.io
Wed Sep 16 00:43:47 CEST 2020
---
modules/demux/adaptive/http/Downloader.cpp | 28 +++++++++++-----------
modules/demux/adaptive/http/Downloader.hpp | 6 +++--
2 files changed, 18 insertions(+), 16 deletions(-)
diff --git a/modules/demux/adaptive/http/Downloader.cpp b/modules/demux/adaptive/http/Downloader.cpp
index e62d1002bf..74a19b28de 100644
--- a/modules/demux/adaptive/http/Downloader.cpp
+++ b/modules/demux/adaptive/http/Downloader.cpp
@@ -31,8 +31,6 @@ using namespace adaptive::http;
Downloader::Downloader()
{
- vlc_mutex_init(&lock);
- vlc_cond_init(&waitcond);
killed = false;
thread_handle_valid = false;
}
@@ -51,29 +49,32 @@ bool Downloader::start()
Downloader::~Downloader()
{
- vlc_mutex_lock( &lock );
- killed = true;
- vlc_cond_signal(&waitcond);
- vlc_mutex_unlock( &lock );
+ kill();
if(thread_handle_valid)
vlc_join(thread_handle, NULL);
}
+
+void Downloader::kill()
+{
+ vlc::threads::mutex_locker locker {lock};
+ killed = true;
+ wait_cond.signal();
+}
+
void Downloader::schedule(HTTPChunkBufferedSource *source)
{
- vlc_mutex_lock(&lock);
+ vlc::threads::mutex_locker locker {lock};
source->hold();
chunks.push_back(source);
- vlc_cond_signal(&waitcond);
- vlc_mutex_unlock(&lock);
+ wait_cond.signal();
}
void Downloader::cancel(HTTPChunkBufferedSource *source)
{
- vlc_mutex_lock(&lock);
+ vlc::threads::mutex_locker locker {lock};
source->release();
chunks.remove(source);
- vlc_mutex_unlock(&lock);
}
void * Downloader::downloaderThread(void *opaque)
@@ -93,11 +94,11 @@ void Downloader::DownloadSource(HTTPChunkBufferedSource *source)
void Downloader::Run()
{
- vlc_mutex_lock(&lock);
+ vlc::threads::mutex_locker locker {lock};
while(1)
{
while(chunks.empty() && !killed)
- vlc_cond_wait(&waitcond, &lock);
+ wait_cond.wait(lock);
if(killed)
break;
@@ -113,5 +114,4 @@ void Downloader::Run()
}
}
}
- vlc_mutex_unlock(&lock);
}
diff --git a/modules/demux/adaptive/http/Downloader.hpp b/modules/demux/adaptive/http/Downloader.hpp
index 1d6cc5767d..e4ee0d5b93 100644
--- a/modules/demux/adaptive/http/Downloader.hpp
+++ b/modules/demux/adaptive/http/Downloader.hpp
@@ -23,6 +23,7 @@
#include "Chunk.h"
#include <vlc_common.h>
+#include <vlc_cxx_helpers.hpp>
#include <list>
namespace adaptive
@@ -44,9 +45,10 @@ namespace adaptive
static void * downloaderThread(void *);
void Run();
void DownloadSource(HTTPChunkBufferedSource *);
+ void kill();
vlc_thread_t thread_handle;
- vlc_mutex_t lock;
- vlc_cond_t waitcond;
+ vlc::threads::mutex lock;
+ vlc::threads::condition_variable wait_cond;
bool thread_handle_valid;
bool killed;
std::list<HTTPChunkBufferedSource *> chunks;
--
2.28.0
More information about the vlc-devel
mailing list