diff --git a/libwvdrmengine/cdm/core/src/cdm_engine.cpp b/libwvdrmengine/cdm/core/src/cdm_engine.cpp index 0e9b01f1..9682fdf0 100644 --- a/libwvdrmengine/cdm/core/src/cdm_engine.cpp +++ b/libwvdrmengine/cdm/core/src/cdm_engine.cpp @@ -396,7 +396,16 @@ CdmResponseType CdmEngine::AddKey(const CdmSessionId& session_id, return EMPTY_KEY_DATA_1; } - const CdmResponseType sts = session->AddKey(key_data); + CdmResponseType sts = KEY_ADDED; + { + // TODO(rfrias): Refactor. For now lock while adding keys to prevent + // a race condition between this and the decryption thread. This may + // occur if |policy_timers_| is reset when PolicyEngine::SetLicense + // is called. + std::unique_lock lock(session_map_lock_); + sts = session->AddKey(key_data); + } + if (sts == KEY_ADDED) { if (session->is_release()) { *license_type = kLicenseTypeRelease;