}
player_released_ = true;
is_preloaded_ = false;
+ // Signal the drm conditional, so that any wait on the CompleteDrmInit
+ // returns.
drm_condition_.Signal();
StopSeekableTimeUpdateTimer();
}
base::TimeTicks start = base::TimeTicks::Now();
- while (decryptor_ == 0) {
+ // Wait until the decryptor is set, but ensure to bail out if the player is
+ // released.
+ while (decryptor_ == 0 && player_released_ == false) {
base::TimeTicks curr = base::TimeTicks::Now();
if ((curr - start).InSeconds() >= kDrmTimeoutSeconds) {
break;
drm_condition_.TimedWait(base::TimeDelta::FromSeconds(
kDrmTimeoutSeconds - (curr - start).InSeconds()));
}
- if (decryptor_ == 0) {
+ if (decryptor_ == 0 && player_released_ == false) {
LOG_ID(ERROR, GetPlayerId())
<< "No decryptor received before drmeme timeout!";
OnMediaError(MEDIA_ERROR_DECODE);