vlc | branch: master | Alexandre Janniaux <[email protected]> | Wed Sep 16 00:43:47 2020 +0200| [f42f0d58d5b34f104f8e3659d78704b5242e18c4] | committer: Alexandre Janniaux
adaptive: downloader: C++ify mutex usage > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=f42f0d58d5b34f104f8e3659d78704b5242e18c4 --- 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; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
