mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-23 18:26:15 +00:00
Bug 1161443: Always read SDM::mWaitForInternalDrain while holding monitor. r=gerald
This commit is contained in:
parent
dbf43400f9
commit
aacb467ca4
@ -150,9 +150,16 @@ void
|
||||
SharedDecoderManager::SetIdle(MediaDataDecoder* aProxy)
|
||||
{
|
||||
if (aProxy && mActiveProxy == aProxy) {
|
||||
MonitorAutoLock mon(mMonitor);
|
||||
mWaitForInternalDrain = true;
|
||||
if (NS_SUCCEEDED(mActiveProxy->Drain())) {
|
||||
MonitorAutoLock mon(mMonitor);
|
||||
nsresult rv;
|
||||
{
|
||||
// We don't want to hold the lock while calling Drain() has some
|
||||
// platform implementations call DrainComplete() immediately.
|
||||
MonitorAutoUnlock mon(mMonitor);
|
||||
rv = mActiveProxy->Drain();
|
||||
}
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
while (mWaitForInternalDrain) {
|
||||
mon.Wait();
|
||||
}
|
||||
@ -165,13 +172,15 @@ SharedDecoderManager::SetIdle(MediaDataDecoder* aProxy)
|
||||
void
|
||||
SharedDecoderManager::DrainComplete()
|
||||
{
|
||||
if (mWaitForInternalDrain) {
|
||||
{
|
||||
MonitorAutoLock mon(mMonitor);
|
||||
mWaitForInternalDrain = false;
|
||||
mon.NotifyAll();
|
||||
} else {
|
||||
mActiveCallback->DrainComplete();
|
||||
if (mWaitForInternalDrain) {
|
||||
mWaitForInternalDrain = false;
|
||||
mon.NotifyAll();
|
||||
return;
|
||||
}
|
||||
}
|
||||
mActiveCallback->DrainComplete();
|
||||
}
|
||||
|
||||
void
|
||||
|
Loading…
Reference in New Issue
Block a user