Commit ec113420 authored by Max Kellermann's avatar Max Kellermann

player/Thread: hold mutex while calling SongBorder()

Eliminates unnecessary mutex locks.
parent 1954e94d
...@@ -414,11 +414,6 @@ public: ...@@ -414,11 +414,6 @@ public:
return border_pause; return border_pause;
} }
bool LockApplyBorderPause() noexcept {
const std::lock_guard<Mutex> lock(mutex);
return ApplyBorderPause();
}
void Kill() noexcept; void Kill() noexcept;
gcc_pure gcc_pure
......
...@@ -333,7 +333,7 @@ private: ...@@ -333,7 +333,7 @@ private:
* has consumed all chunks of the current song, and we should start * has consumed all chunks of the current song, and we should start
* sending chunks from the next one. * sending chunks from the next one.
* *
* The player lock is not held. * Caller must lock the mutex.
*/ */
void SongBorder() noexcept; void SongBorder() noexcept;
...@@ -968,20 +968,22 @@ Player::PlayNextChunk() noexcept ...@@ -968,20 +968,22 @@ Player::PlayNextChunk() noexcept
inline void inline void
Player::SongBorder() noexcept Player::SongBorder() noexcept
{ {
{
const ScopeUnlock unlock(pc.mutex);
FormatDefault(player_domain, "played \"%s\"", song->GetURI()); FormatDefault(player_domain, "played \"%s\"", song->GetURI());
throttle_silence_log.Reset(); throttle_silence_log.Reset();
ReplacePipe(dc.pipe); ReplacePipe(dc.pipe);
pc.outputs.SongBorder(); pc.outputs.SongBorder();
}
{
const std::lock_guard<Mutex> lock(pc.mutex);
ActivateDecoder(); ActivateDecoder();
}
const bool border_pause = pc.LockApplyBorderPause(); const bool border_pause = pc.ApplyBorderPause();
if (border_pause) { if (border_pause) {
paused = true; paused = true;
idle_add(IDLE_PLAYER); idle_add(IDLE_PLAYER);
...@@ -1101,7 +1103,6 @@ Player::Run() noexcept ...@@ -1101,7 +1103,6 @@ Player::Run() noexcept
} else if (IsDecoderAtNextSong()) { } else if (IsDecoderAtNextSong()) {
/* at the beginning of a new song */ /* at the beginning of a new song */
const ScopeUnlock unlock(pc.mutex);
SongBorder(); SongBorder();
} else if (dc.IsIdle()) { } else if (dc.IsIdle()) {
/* check the size of the pipe again, because /* check the size of the pipe again, because
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment