output/alsa: merge Activate() and UnlockActivate()
Prepare to make the "active" attribute thread-safe.
This commit is contained in:
parent
5dfdc15f93
commit
7d546f80f9
|
@ -233,28 +233,20 @@ private:
|
||||||
* #EventLoop. Before calling this, filling the ring buffer
|
* #EventLoop. Before calling this, filling the ring buffer
|
||||||
* has no effect; nothing will be played, and no code will be
|
* has no effect; nothing will be played, and no code will be
|
||||||
* run on #EventLoop's thread.
|
* run on #EventLoop's thread.
|
||||||
*/
|
*
|
||||||
void Activate() noexcept {
|
* Caller must hold the mutex.
|
||||||
if (active)
|
|
||||||
return;
|
|
||||||
|
|
||||||
active = true;
|
|
||||||
defer_invalidate_sockets.Schedule();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Wrapper for Activate() which unlocks our mutex. Call this
|
|
||||||
* if you're holding the mutex.
|
|
||||||
*
|
*
|
||||||
* @return true if Activate() was called, false if the mutex
|
* @return true if Activate() was called, false if the mutex
|
||||||
* was never unlocked
|
* was never unlocked
|
||||||
*/
|
*/
|
||||||
bool UnlockActivate() noexcept {
|
bool Activate() noexcept {
|
||||||
if (active)
|
if (active)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
active = true;
|
||||||
|
|
||||||
const ScopeUnlock unlock(mutex);
|
const ScopeUnlock unlock(mutex);
|
||||||
Activate();
|
defer_invalidate_sockets.Schedule();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -767,7 +759,7 @@ AlsaOutput::Drain()
|
||||||
|
|
||||||
drain = true;
|
drain = true;
|
||||||
|
|
||||||
UnlockActivate();
|
Activate();
|
||||||
|
|
||||||
while (drain) {
|
while (drain) {
|
||||||
if (error)
|
if (error)
|
||||||
|
@ -853,7 +845,7 @@ AlsaOutput::Play(const void *chunk, size_t size)
|
||||||
/* now that the ring_buffer is full, we can activate
|
/* now that the ring_buffer is full, we can activate
|
||||||
the socket handlers to trigger the first
|
the socket handlers to trigger the first
|
||||||
snd_pcm_writei() */
|
snd_pcm_writei() */
|
||||||
if (UnlockActivate())
|
if (Activate())
|
||||||
/* since everything may have changed while the
|
/* since everything may have changed while the
|
||||||
mutex was unlocked, we need to skip the
|
mutex was unlocked, we need to skip the
|
||||||
cond.wait() call below and check the new
|
cond.wait() call below and check the new
|
||||||
|
|
Loading…
Reference in New Issue