diff --git a/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp b/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp index d674fc61..f37d8579 100644 --- a/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp +++ b/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp @@ -44,6 +44,12 @@ using video_widevine::ProvisioningResponse; using wvcdm::kLevel3; using wvcdm::kLevelDefault; using namespace std; +using namespace std::chrono; + +#define GET_TIME() \ + ((duration_cast(system_clock::now().time_since_epoch())) \ + .count()) +#define TIMEOUT_IN_MILLISECONDS 2 * 60 * 1000 // 2 minutes namespace { @@ -528,7 +534,16 @@ class WatchDog { { std::unique_lock lock(mutex_); if (running_) { - condition_.wait_for(lock, std::chrono::minutes(2)); + bool waitStatus = false; + time_t time = GET_TIME(); + do { + waitStatus = condition_.wait_for( + lock, std::chrono::milliseconds(TIMEOUT_IN_MILLISECONDS), + [time, this]() { + return ((GET_TIME() > time + TIMEOUT_IN_MILLISECONDS) | + (!running_)); + }); + } while (waitStatus != true); } if (running_) { gave_up_ = true;