diff --git a/libwvdrmengine/cdm/core/include/device_files.h b/libwvdrmengine/cdm/core/include/device_files.h index d23a5d45..8b3926ef 100644 --- a/libwvdrmengine/cdm/core/include/device_files.h +++ b/libwvdrmengine/cdm/core/include/device_files.h @@ -5,6 +5,7 @@ #ifndef WVCDM_CORE_DEVICE_FILES_H_ #define WVCDM_CORE_DEVICE_FILES_H_ +#include #include #include #include @@ -369,6 +370,7 @@ class DeviceFiles { #endif static std::set reserved_license_ids_; + static std::mutex reserved_license_ids_mutex_; wvutil::FileSystem* file_system_; CdmSecurityLevel security_level_; diff --git a/libwvdrmengine/cdm/core/src/device_files.cpp b/libwvdrmengine/cdm/core/src/device_files.cpp index 2602171b..e18fac0a 100644 --- a/libwvdrmengine/cdm/core/src/device_files.cpp +++ b/libwvdrmengine/cdm/core/src/device_files.cpp @@ -87,6 +87,8 @@ using video_widevine_client::sdk:: } namespace wvcdm { +using UniqueLock = std::unique_lock; + namespace { const char kEmptyFileName[] = ""; const char kFalse[] = "false"; @@ -364,6 +366,7 @@ const char* DeviceFiles::ResponseTypeToString(ResponseType type) { // static std::set DeviceFiles::reserved_license_ids_; +std::mutex DeviceFiles::reserved_license_ids_mutex_; DeviceFiles::DeviceFiles(wvutil::FileSystem* file_system) : file_system_(file_system), @@ -847,6 +850,7 @@ bool DeviceFiles::StoreLicense(const CdmLicenseData& license_data, std::string serialized_file; file.SerializeToString(&serialized_file); + UniqueLock lock(reserved_license_ids_mutex_); reserved_license_ids_.erase(license_data.key_set_id); *result = StoreFileWithHash(license_data.key_set_id + kLicenseFileNameExt, serialized_file); @@ -984,18 +988,21 @@ bool DeviceFiles::DeleteAllFiles() { bool DeviceFiles::LicenseExists(const std::string& key_set_id) { RETURN_FALSE_IF_UNINITIALIZED(); + UniqueLock lock(reserved_license_ids_mutex_); return reserved_license_ids_.count(key_set_id) || FileExists(key_set_id + kLicenseFileNameExt); } bool DeviceFiles::ReserveLicenseId(const std::string& key_set_id) { RETURN_FALSE_IF_UNINITIALIZED(); + UniqueLock lock(reserved_license_ids_mutex_); reserved_license_ids_.insert(key_set_id); return true; } bool DeviceFiles::UnreserveLicenseId(const std::string& key_set_id) { RETURN_FALSE_IF_UNINITIALIZED(); + UniqueLock lock(reserved_license_ids_mutex_); reserved_license_ids_.erase(key_set_id); return true; }