decoder/Internal: use ScopeLock

This commit is contained in:
Max Kellermann 2015-12-31 13:44:19 +01:00
parent b9213df64b
commit ef260377c3

View File

@ -56,6 +56,13 @@ need_chunks(DecoderControl &dc)
return dc.command; return dc.command;
} }
static DecoderCommand
LockNeedChunks(DecoderControl &dc)
{
const ScopeLock protect(dc.mutex);
return need_chunks(dc);
}
MusicChunk * MusicChunk *
Decoder::GetChunk() Decoder::GetChunk()
{ {
@ -74,9 +81,7 @@ Decoder::GetChunk()
return chunk; return chunk;
} }
dc.Lock(); cmd = LockNeedChunks(dc);
cmd = need_chunks(dc);
dc.Unlock();
} while (cmd == DecoderCommand::NONE); } while (cmd == DecoderCommand::NONE);
return nullptr; return nullptr;
@ -97,8 +102,7 @@ Decoder::FlushChunk()
chunk = nullptr; chunk = nullptr;
dc.Lock(); const ScopeLock protect(dc.mutex);
if (dc.client_is_waiting) if (dc.client_is_waiting)
dc.client_cond.signal(); dc.client_cond.signal();
dc.Unlock();
} }