[vlc-devel] [PATCH] Make mutexes mutable
Romain Vimont
rom at rom1v.com
Mon Jan 8 21:45:16 CET 2018
Mutexes must be locked and unlocked even in C++ const methods. To avoid
const casts, simply declare them mutable.
---
modules/demux/adaptive/Streams.cpp | 8 ++++----
modules/demux/adaptive/Streams.hpp | 2 +-
.../adaptive/logic/RateBasedAdaptationLogic.cpp | 4 ++--
.../adaptive/logic/RateBasedAdaptationLogic.h | 2 +-
modules/demux/adaptive/plumbing/CommandsQueue.cpp | 24 +++++++++++-----------
modules/demux/adaptive/plumbing/CommandsQueue.hpp | 2 +-
modules/demux/adaptive/plumbing/FakeESOut.cpp | 16 +++++++--------
modules/demux/adaptive/plumbing/FakeESOut.hpp | 2 +-
8 files changed, 30 insertions(+), 30 deletions(-)
diff --git a/modules/demux/adaptive/Streams.cpp b/modules/demux/adaptive/Streams.cpp
index ecb3efc68b..29ba11d70f 100644
--- a/modules/demux/adaptive/Streams.cpp
+++ b/modules/demux/adaptive/Streams.cpp
@@ -146,9 +146,9 @@ void AbstractStream::setDescription(const std::string &desc)
mtime_t AbstractStream::getPCR() const
{
- vlc_mutex_lock(const_cast<vlc_mutex_t *>(&lock));
+ vlc_mutex_lock(&lock);
mtime_t pcr = isDisabled() ? VLC_TS_INVALID : commandsqueue->getPCR();
- vlc_mutex_unlock(const_cast<vlc_mutex_t *>(&lock));
+ vlc_mutex_unlock(&lock);
return pcr;
}
@@ -162,7 +162,7 @@ mtime_t AbstractStream::getMinAheadTime() const
mtime_t AbstractStream::getFirstDTS() const
{
mtime_t dts;
- vlc_mutex_lock(const_cast<vlc_mutex_t *>(&lock));
+ vlc_mutex_lock(&lock);
if(isDisabled())
{
dts = VLC_TS_INVALID;
@@ -173,7 +173,7 @@ mtime_t AbstractStream::getFirstDTS() const
if(dts == VLC_TS_INVALID)
dts = commandsqueue->getPCR();
}
- vlc_mutex_unlock(const_cast<vlc_mutex_t *>(&lock));
+ vlc_mutex_unlock(&lock);
return dts;
}
diff --git a/modules/demux/adaptive/Streams.hpp b/modules/demux/adaptive/Streams.hpp
index b6c188d081..a56f57c0b0 100644
--- a/modules/demux/adaptive/Streams.hpp
+++ b/modules/demux/adaptive/Streams.hpp
@@ -125,7 +125,7 @@ namespace adaptive
AbstractDemuxer *demuxer;
AbstractSourceStream *demuxersource;
FakeESOut *fakeesout; /* to intercept/proxy what is sent from demuxstream */
- vlc_mutex_t lock; /* lock for everything accessed by dequeuing */
+ mutable vlc_mutex_t lock; /* lock for everything accessed by dequeuing */
private:
buffering_status doBufferize(mtime_t, unsigned, unsigned);
diff --git a/modules/demux/adaptive/logic/RateBasedAdaptationLogic.cpp b/modules/demux/adaptive/logic/RateBasedAdaptationLogic.cpp
index e100330cd2..814de251b2 100644
--- a/modules/demux/adaptive/logic/RateBasedAdaptationLogic.cpp
+++ b/modules/demux/adaptive/logic/RateBasedAdaptationLogic.cpp
@@ -58,9 +58,9 @@ BaseRepresentation *RateBasedAdaptationLogic::getNextRepresentation(BaseAdaptati
if(adaptSet == NULL)
return NULL;
- vlc_mutex_lock(const_cast<vlc_mutex_t *>(&lock));
+ vlc_mutex_lock(&lock);
size_t availBps = currentBps + ((currep) ? currep->getBandwidth() : 0);
- vlc_mutex_unlock(const_cast<vlc_mutex_t *>(&lock));
+ vlc_mutex_unlock(&lock);
if(availBps > usedBps)
availBps -= usedBps;
else
diff --git a/modules/demux/adaptive/logic/RateBasedAdaptationLogic.h b/modules/demux/adaptive/logic/RateBasedAdaptationLogic.h
index b99d18cdf2..572316bafa 100644
--- a/modules/demux/adaptive/logic/RateBasedAdaptationLogic.h
+++ b/modules/demux/adaptive/logic/RateBasedAdaptationLogic.h
@@ -54,7 +54,7 @@ namespace adaptive
size_t dlsize;
mtime_t dllength;
- vlc_mutex_t lock;
+ mutable vlc_mutex_t lock;
};
class FixedRateAdaptationLogic : public AbstractAdaptationLogic
diff --git a/modules/demux/adaptive/plumbing/CommandsQueue.cpp b/modules/demux/adaptive/plumbing/CommandsQueue.cpp
index 850c94b60e..b773e01171 100644
--- a/modules/demux/adaptive/plumbing/CommandsQueue.cpp
+++ b/modules/demux/adaptive/plumbing/CommandsQueue.cpp
@@ -403,9 +403,9 @@ void CommandsQueue::Abort( bool b_reset )
bool CommandsQueue::isEmpty() const
{
- vlc_mutex_lock(const_cast<vlc_mutex_t *>(&lock));
+ vlc_mutex_lock(&lock);
bool b_empty = commands.empty() && incoming.empty();
- vlc_mutex_unlock(const_cast<vlc_mutex_t *>(&lock));
+ vlc_mutex_unlock(&lock);
return b_empty;
}
@@ -425,9 +425,9 @@ void CommandsQueue::setDraining()
bool CommandsQueue::isDraining() const
{
- vlc_mutex_lock(const_cast<vlc_mutex_t *>(&lock));
+ vlc_mutex_lock(&lock);
bool b = b_draining;
- vlc_mutex_unlock(const_cast<vlc_mutex_t *>(&lock));
+ vlc_mutex_unlock(&lock);
return b;
}
@@ -444,9 +444,9 @@ void CommandsQueue::setEOF( bool b )
bool CommandsQueue::isEOF() const
{
- vlc_mutex_lock(const_cast<vlc_mutex_t *>(&lock));
+ vlc_mutex_lock(&lock);
bool b = b_eof;
- vlc_mutex_unlock(const_cast<vlc_mutex_t *>(&lock));
+ vlc_mutex_unlock(&lock);
return b;
}
@@ -458,16 +458,16 @@ mtime_t CommandsQueue::getDemuxedAmount() const
mtime_t CommandsQueue::getBufferingLevel() const
{
mtime_t i_buffer;
- vlc_mutex_lock(const_cast<vlc_mutex_t *>(&lock));
+ vlc_mutex_lock(&lock);
i_buffer = bufferinglevel;
- vlc_mutex_unlock(const_cast<vlc_mutex_t *>(&lock));
+ vlc_mutex_unlock(&lock);
return i_buffer;
}
mtime_t CommandsQueue::getFirstDTS() const
{
std::list<AbstractCommand *>::const_iterator it;
- vlc_mutex_lock(const_cast<vlc_mutex_t *>(&lock));
+ vlc_mutex_lock(&lock);
mtime_t i_firstdts = pcr;
for( it = commands.begin(); it != commands.end(); ++it )
{
@@ -479,7 +479,7 @@ mtime_t CommandsQueue::getFirstDTS() const
break;
}
}
- vlc_mutex_unlock(const_cast<vlc_mutex_t *>(&lock));
+ vlc_mutex_unlock(&lock);
return i_firstdts;
}
@@ -491,8 +491,8 @@ void CommandsQueue::LockedSetDraining()
mtime_t CommandsQueue::getPCR() const
{
- vlc_mutex_lock(const_cast<vlc_mutex_t *>(&lock));
+ vlc_mutex_lock(&lock);
mtime_t i_pcr = pcr;
- vlc_mutex_unlock(const_cast<vlc_mutex_t *>(&lock));
+ vlc_mutex_unlock(&lock);
return i_pcr;
}
diff --git a/modules/demux/adaptive/plumbing/CommandsQueue.hpp b/modules/demux/adaptive/plumbing/CommandsQueue.hpp
index fe5abbd497..17551bfdf2 100644
--- a/modules/demux/adaptive/plumbing/CommandsQueue.hpp
+++ b/modules/demux/adaptive/plumbing/CommandsQueue.hpp
@@ -171,7 +171,7 @@ namespace adaptive
private:
CommandsFactory *commandsFactory;
- vlc_mutex_t lock;
+ mutable vlc_mutex_t lock;
void LockedCommit();
void LockedSetDraining();
std::list<AbstractCommand *> incoming;
diff --git a/modules/demux/adaptive/plumbing/FakeESOut.cpp b/modules/demux/adaptive/plumbing/FakeESOut.cpp
index bc1517ebc7..cbf90803f9 100644
--- a/modules/demux/adaptive/plumbing/FakeESOut.cpp
+++ b/modules/demux/adaptive/plumbing/FakeESOut.cpp
@@ -155,9 +155,9 @@ void FakeESOut::createOrRecycleRealEsID( FakeESOutID *es_id )
mtime_t FakeESOut::getTimestampOffset() const
{
- vlc_mutex_lock(const_cast<vlc_mutex_t *>(&lock));
+ vlc_mutex_lock(&lock);
mtime_t time = timestamps_offset;
- vlc_mutex_unlock(const_cast<vlc_mutex_t *>(&lock));
+ vlc_mutex_unlock(&lock);
return time;
}
@@ -165,11 +165,11 @@ size_t FakeESOut::esCount() const
{
size_t i_count = 0;
std::list<FakeESOutID *>::const_iterator it;
- vlc_mutex_lock(const_cast<vlc_mutex_t *>(&lock));
+ vlc_mutex_lock(&lock);
for( it=fakeesidlist.begin(); it!=fakeesidlist.end(); ++it )
if( (*it)->realESID() )
i_count++;
- vlc_mutex_unlock(const_cast<vlc_mutex_t *>(&lock));
+ vlc_mutex_unlock(&lock);
return i_count;
}
@@ -237,14 +237,14 @@ bool FakeESOut::hasSelectedEs() const
{
bool b_selected = false;
std::list<FakeESOutID *>::const_iterator it;
- vlc_mutex_lock(const_cast<vlc_mutex_t *>(&lock));
+ vlc_mutex_lock(&lock);
for( it=fakeesidlist.begin(); it!=fakeesidlist.end() && !b_selected; ++it )
{
FakeESOutID *esID = *it;
if( esID->realESID() )
es_out_Control( real_es_out, ES_OUT_GET_ES_STATE, esID->realESID(), &b_selected );
}
- vlc_mutex_unlock(const_cast<vlc_mutex_t *>(&lock));
+ vlc_mutex_unlock(&lock);
return b_selected;
}
@@ -257,9 +257,9 @@ bool FakeESOut::decodersDrained()
bool FakeESOut::restarting() const
{
- vlc_mutex_lock(const_cast<vlc_mutex_t *>(&lock));
+ vlc_mutex_lock(&lock);
bool b = !recycle_candidates.empty();
- vlc_mutex_unlock(const_cast<vlc_mutex_t *>(&lock));
+ vlc_mutex_unlock(&lock);
return b;
}
diff --git a/modules/demux/adaptive/plumbing/FakeESOut.hpp b/modules/demux/adaptive/plumbing/FakeESOut.hpp
index 1c1d686918..d559928fd4 100644
--- a/modules/demux/adaptive/plumbing/FakeESOut.hpp
+++ b/modules/demux/adaptive/plumbing/FakeESOut.hpp
@@ -67,7 +67,7 @@ namespace adaptive
static void esOutDestroy_Callback( es_out_t * );
private:
- vlc_mutex_t lock;
+ mutable vlc_mutex_t lock;
es_out_t *real_es_out;
FakeESOutID * createNewID( const es_format_t * );
ExtraFMTInfoInterface *extrainfo;
--
2.11.0
More information about the vlc-devel
mailing list