Bail out from waiting if the player is released. 28/320728/3
authorMark Toller <mark.toller@samsung.com>
Thu, 21 Nov 2024 11:04:51 +0000 (11:04 +0000)
committerBot Blink <blinkbot@samsung.com>
Thu, 21 Nov 2024 19:13:28 +0000 (19:13 +0000)
Change-Id: I5f8815fb9f816ed4653d3e4d70fb27afb61f99c9

tizen_src/chromium_impl/media/filters/media_player_bridge_capi_tv.cc

index ecdb0171a412495535b8cac9cab4efc01233e227..66c3e4f636ed519b9f62a7a5e2efebb343bb3e08 100644 (file)
@@ -440,6 +440,8 @@ void MediaPlayerBridgeCapiTV::Release() {
   }
   player_released_ = true;
   is_preloaded_ = false;
+  // Signal the drm conditional, so that any wait on the CompleteDrmInit
+  // returns.
   drm_condition_.Signal();
 
   StopSeekableTimeUpdateTimer();
@@ -4009,7 +4011,9 @@ bool MediaPlayerBridgeCapiTV::CompleteDrmInit(int& drmhandle) {
     }
 
     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;
@@ -4019,7 +4023,7 @@ bool MediaPlayerBridgeCapiTV::CompleteDrmInit(int& drmhandle) {
       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);