vlc | branch: master | Alexandre Janniaux <[email protected]> | Wed Sep 16 01:04:06 2020 +0200| [9e0090874a5d92b98a031dea73f3d86ac95e396c] | committer: Alexandre Janniaux
adaptive: chunk: C++ify mutex usage > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=9e0090874a5d92b98a031dea73f3d86ac95e396c --- modules/demux/adaptive/http/Chunk.cpp | 67 +++++++++++++++++------------------ modules/demux/adaptive/http/Chunk.h | 5 +-- 2 files changed, 35 insertions(+), 37 deletions(-) diff --git a/modules/demux/adaptive/http/Chunk.cpp b/modules/demux/adaptive/http/Chunk.cpp index 2af20cd6b2..c6682c2466 100644 --- a/modules/demux/adaptive/http/Chunk.cpp +++ b/modules/demux/adaptive/http/Chunk.cpp @@ -36,6 +36,7 @@ #include <algorithm> using namespace adaptive::http; +using vlc::threads::mutex_locker; AbstractChunkSource::AbstractChunkSource() { @@ -144,7 +145,6 @@ HTTPChunkSource::HTTPChunkSource(const std::string& url, AbstractConnectionManag connManager (manager), consumed (0) { - vlc_mutex_init(&lock); prepared = false; eof = false; sourceid = id; @@ -161,7 +161,7 @@ HTTPChunkSource::~HTTPChunkSource() bool HTTPChunkSource::init(const std::string &url) { - vlc_mutex_locker locker(&lock); + mutex_locker locker {lock}; params = ConnectionParams(url); params.setUseAccess(usesAccess()); @@ -176,7 +176,7 @@ bool HTTPChunkSource::init(const std::string &url) bool HTTPChunkSource::hasMoreData() const { - vlc_mutex_locker locker(&lock); + mutex_locker locker {lock}; if(eof) return false; else if(contentLength) @@ -186,7 +186,7 @@ bool HTTPChunkSource::hasMoreData() const block_t * HTTPChunkSource::read(size_t readsize) { - vlc_mutex_locker locker(&lock); + mutex_locker locker {lock}; if(!prepare()) { eof = true; @@ -233,7 +233,7 @@ block_t * HTTPChunkSource::read(size_t readsize) std::string HTTPChunkSource::getContentType() const { - vlc_mutex_locker locker(&lock); + mutex_locker locker {lock}; if(connection) return connection->getContentType(); else @@ -298,7 +298,6 @@ HTTPChunkBufferedSource::HTTPChunkBufferedSource(const std::string& url, Abstrac pp_tail (&p_head), buffered (0) { - vlc_cond_init(&avail); done = false; eof = false; held = false; @@ -310,10 +309,10 @@ HTTPChunkBufferedSource::~HTTPChunkBufferedSource() /* cancel ourself if in queue */ connManager->cancel(this); - vlc_mutex_lock(&lock); + mutex_locker locker {lock}; done = true; if(held) /* wait release if not in queue but currently downloaded */ - vlc_cond_wait(&avail, &lock); + avail.wait(lock); if(p_head) { @@ -322,47 +321,45 @@ HTTPChunkBufferedSource::~HTTPChunkBufferedSource() pp_tail = &p_head; } buffered = 0; - vlc_mutex_unlock(&lock); } bool HTTPChunkBufferedSource::isDone() const { - vlc_mutex_locker locker( &lock ); + mutex_locker locker {lock}; return done; } void HTTPChunkBufferedSource::hold() { - vlc_mutex_locker locker( &lock ); + mutex_locker locker {lock}; held = true; } void HTTPChunkBufferedSource::release() { - vlc_mutex_locker locker( &lock ); + mutex_locker locker {lock}; held = false; - vlc_cond_signal(&avail); + avail.signal(); } void HTTPChunkBufferedSource::bufferize(size_t readsize) { - vlc_mutex_lock(&lock); - if(!prepare()) { - done = true; - eof = true; - vlc_cond_signal(&avail); - vlc_mutex_unlock(&lock); - return; - } - - if(readsize < HTTPChunkSource::CHUNK_SIZE) - readsize = HTTPChunkSource::CHUNK_SIZE; + mutex_locker locker {lock}; + if(!prepare()) + { + done = true; + eof = true; + avail.signal(); + return; + } - if(contentLength && readsize > contentLength - buffered) - readsize = contentLength - buffered; + if(readsize < HTTPChunkSource::CHUNK_SIZE) + readsize = HTTPChunkSource::CHUNK_SIZE; - vlc_mutex_unlock(&lock); + if(contentLength && readsize > contentLength - buffered) + readsize = contentLength - buffered; + } block_t *p_block = block_Alloc(readsize); if(!p_block) @@ -382,7 +379,7 @@ void HTTPChunkBufferedSource::bufferize(size_t readsize) { block_Release(p_block); p_block = NULL; - vlc_mutex_locker locker( &lock ); + mutex_locker locker {lock}; done = true; rate.size = buffered + consumed; rate.time = vlc_tick_now() - downloadstart; @@ -391,7 +388,7 @@ void HTTPChunkBufferedSource::bufferize(size_t readsize) else { p_block->i_buffer = (size_t) ret; - vlc_mutex_locker locker( &lock ); + mutex_locker locker {lock}; buffered += p_block->i_buffer; block_ChainLastAppend(&pp_tail, p_block); if((size_t) ret < readsize) @@ -408,7 +405,7 @@ void HTTPChunkBufferedSource::bufferize(size_t readsize) connManager->updateDownloadRate(sourceid, rate.size, rate.time); } - vlc_cond_signal(&avail); + avail.signal(); } bool HTTPChunkBufferedSource::prepare() @@ -423,7 +420,7 @@ bool HTTPChunkBufferedSource::prepare() bool HTTPChunkBufferedSource::hasMoreData() const { - vlc_mutex_locker locker( &lock ); + mutex_locker locker {lock}; return !eof; } @@ -431,10 +428,10 @@ block_t * HTTPChunkBufferedSource::readBlock() { block_t *p_block = NULL; - vlc_mutex_locker locker(&lock); + mutex_locker locker {lock}; while(!p_head && !done) - vlc_cond_wait(&avail, &lock); + avail.wait(lock); if(!p_head && done) { @@ -463,10 +460,10 @@ block_t * HTTPChunkBufferedSource::readBlock() block_t * HTTPChunkBufferedSource::read(size_t readsize) { - vlc_mutex_locker locker(&lock); + mutex_locker locker {lock}; while(readsize > buffered && !done) - vlc_cond_wait(&avail, &lock); + avail.wait(lock); block_t *p_block = NULL; if(!readsize || !buffered || !(p_block = block_Alloc(readsize)) ) diff --git a/modules/demux/adaptive/http/Chunk.h b/modules/demux/adaptive/http/Chunk.h index 7b1c471355..b174f41f5a 100644 --- a/modules/demux/adaptive/http/Chunk.h +++ b/modules/demux/adaptive/http/Chunk.h @@ -31,6 +31,7 @@ #include <vector> #include <string> #include <stdint.h> +#include <vlc_cxx_helpers.hpp> typedef struct block_t block_t; @@ -104,7 +105,7 @@ namespace adaptive virtual bool prepare(); AbstractConnection *connection; AbstractConnectionManager *connManager; - mutable vlc_mutex_t lock; + mutable vlc::threads::mutex lock; size_t consumed; /* read pointer */ bool prepared; bool eof; @@ -141,7 +142,7 @@ namespace adaptive bool done; bool eof; vlc_tick_t downloadstart; - vlc_cond_t avail; + vlc::threads::condition_variable avail; bool held; }; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
