From e60c21e761682d7dd1db861afd8c24baedda2a04 Mon Sep 17 00:00:00 2001 From: sniukalov Date: Thu, 27 Sep 2018 15:22:32 +0300 Subject: [PATCH] Minimized use of policy_manager_lock_. --- .../policies/policy_handler.h | 7 +- .../src/policies/policy_handler.cc | 235 ++++++++---------- 2 files changed, 113 insertions(+), 129 deletions(-) diff --git a/src/components/application_manager/include/application_manager/policies/policy_handler.h b/src/components/application_manager/include/application_manager/policies/policy_handler.h index 58ed4c599e9..e9c8dc7c806 100644 --- a/src/components/application_manager/include/application_manager/policies/policy_handler.h +++ b/src/components/application_manager/include/application_manager/policies/policy_handler.h @@ -744,9 +744,12 @@ class PolicyHandler : public PolicyHandlerInterface, * @return result PolicyManager function */ template - auto CallPolicyManagerFunction(Func func, Args... args) const + auto CallPolicyManagerFunction(Func func, Args&&... args) const -> decltype((std::declval().* - std::declval())(std::declval()...)); + std::declval())(std::declval()...)) { + sync_primitives::AutoLock lock(policy_manager_lock_); + return ((*policy_manager_).*func)(args...); + } /** * @brief Contains device handles, which were sent for user consent to HMI diff --git a/src/components/application_manager/src/policies/policy_handler.cc b/src/components/application_manager/src/policies/policy_handler.cc index 7c84d908344..a3d9d3195a8 100644 --- a/src/components/application_manager/src/policies/policy_handler.cc +++ b/src/components/application_manager/src/policies/policy_handler.cc @@ -400,8 +400,8 @@ bool PolicyHandler::InitPolicyTable() { hmi_apis::FunctionID::BasicCommunication_OnReady); std::string preloaded_file = get_settings().preloaded_pt_file(); if (file_system::FileExists(preloaded_file)) { - sync_primitives::AutoLock lock(policy_manager_lock_); - return policy_manager_->InitPT(preloaded_file, &get_settings()); + return CallPolicyManagerFunction( + &PolicyManager::InitPT, preloaded_file, &get_settings()); } LOG4CXX_FATAL(logger_, "The file which contains preloaded PT is not exist"); return false; @@ -411,8 +411,7 @@ bool PolicyHandler::ResetPolicyTable() { POLICY_LIB_CHECK(false); std::string preloaded_file = get_settings().preloaded_pt_file(); if (file_system::FileExists(preloaded_file)) { - sync_primitives::AutoLock lock(policy_manager_lock_); - return policy_manager_->ResetPT(preloaded_file); + return CallPolicyManagerFunction(&PolicyManager::ResetPT, preloaded_file); } LOG4CXX_WARN(logger_, "The file which contains preloaded PT is not exist"); return false; @@ -420,8 +419,7 @@ bool PolicyHandler::ResetPolicyTable() { bool PolicyHandler::ClearUserConsent() { POLICY_LIB_CHECK(false); - sync_primitives::AutoLock lock(policy_manager_lock_); - return policy_manager_->ResetUserConsent(); + return CallPolicyManagerFunction(&PolicyManager::ResetUserConsent); } uint32_t PolicyHandler::GetAppIdForSending() const { @@ -537,8 +535,7 @@ void PolicyHandler::SendOnAppPermissionsChanged( void PolicyHandler::OnPTExchangeNeeded() { POLICY_LIB_CHECK_VOID(); - sync_primitives::AutoLock lock(policy_manager_lock_); - policy_manager_->ForcePTExchange(); + CallPolicyManagerFunction(&PolicyManager::ForcePTExchange); } void PolicyHandler::GetAvailableApps(std::queue& apps) { @@ -563,22 +560,22 @@ StatusNotifier PolicyHandler::AddApplication( const std::string& application_id, const rpc::policy_table_interface_base::AppHmiTypes& hmi_types) { POLICY_LIB_CHECK(std::make_shared()); - sync_primitives::AutoLock lock_policy(policy_manager_lock_); - return policy_manager_->AddApplication(application_id, hmi_types); + return CallPolicyManagerFunction( + &PolicyManager::AddApplication, application_id, hmi_types); } void PolicyHandler::AddDevice(const std::string& device_id, const std::string& connection_type) { POLICY_LIB_CHECK_VOID(); - sync_primitives::AutoLock lock(policy_manager_lock_); - policy_manager_->AddDevice(device_id, connection_type); + CallPolicyManagerFunction( + &PolicyManager::AddDevice, device_id, connection_type); } void PolicyHandler::SetDeviceInfo(const std::string& device_id, const DeviceInfo& device_info) { POLICY_LIB_CHECK_VOID(); - sync_primitives::AutoLock lock(policy_manager_lock_); - policy_manager_->SetDeviceInfo(device_id, device_info); + CallPolicyManagerFunction( + &PolicyManager::SetDeviceInfo, device_id, device_info); } #ifdef EXTERNAL_PROPRIETARY_MODE @@ -608,11 +605,12 @@ void PolicyHandler::OnAppPermissionConsentInternal( } if (!out_permissions.policy_app_id.empty()) { - sync_primitives::AutoLock lock(policy_manager_lock_); #ifdef EXTERNAL_PROPRIETARY_MODE - policy_manager_->SetUserConsentForApp(out_permissions, mode); + CallPolicyManagerFunction( + &PolicyManager::SetUserConsentForApp, out_permissions, mode); #else - policy_manager_->SetUserConsentForApp(out_permissions); + CallPolicyManagerFunction(&PolicyManager::SetUserConsentForApp, + out_permissions); #endif } } else if (!app_to_device_link_.empty()) { @@ -661,8 +659,8 @@ void PolicyHandler::OnAppPermissionConsentInternal( "setting common permissions."); } #ifdef EXTERNAL_PROPRIETARY_MODE - sync_primitives::AutoLock lock(policy_manager_lock_); - if (!policy_manager_->SetExternalConsentStatus(external_consent_status)) { + if (!CallPolicyManagerFunction(&PolicyManager::SetExternalConsentStatus, + external_consent_status)) { LOG4CXX_WARN(logger_, "External User Consent Settings status has not been set!"); } @@ -680,8 +678,7 @@ void policy::PolicyHandler::SetDaysAfterEpoch() { #ifdef ENABLE_SECURITY std::string PolicyHandler::RetrieveCertificate() const { POLICY_LIB_CHECK(std::string("")); - sync_primitives::AutoLock lock(policy_manager_lock_); - return policy_manager_->RetrieveCertificate(); + return CallPolicyManagerFunction(&PolicyManager::RetrieveCertificate); } #endif // ENABLE_SECURITY @@ -766,10 +763,10 @@ std::vector PolicyHandler::CollectAppPermissions( return group_permissions; } - sync_primitives::AutoLock lock(policy_manager_lock_); - policy_manager_->GetUserConsentForApp(device_params.device_mac_address, - app->policy_app_id(), - group_permissions); + CallPolicyManagerFunction(&PolicyManager::GetUserConsentForApp, + device_params.device_mac_address, + app->policy_app_id(), + group_permissions); return group_permissions; } @@ -844,10 +841,10 @@ bool PolicyHandler::IsAppSuitableForPolicyUpdate( value->device(), application_manager_.connection_handler().get_session_observer()); - sync_primitives::AutoLock lock(policy_manager_lock_); - const bool is_device_allowed = (kDeviceAllowed == - policy_manager_->GetUserConsentForDevice( - device_params.device_mac_address)); + const bool is_device_allowed = + (kDeviceAllowed == + CallPolicyManagerFunction(&PolicyManager::GetUserConsentForDevice, + device_params.device_mac_address)); LOG4CXX_DEBUG(logger_, "Is device " << device_params.device_mac_address << " allowed " @@ -876,8 +873,8 @@ uint32_t PolicyHandler::ChooseRandomAppForPolicyUpdate( void PolicyHandler::OnDeviceSwitching(const std::string& device_id_from, const std::string& device_id_to) { POLICY_LIB_CHECK_VOID(); - sync_primitives::AutoLock lock(policy_manager_lock_); - policy_manager_->OnDeviceSwitching(device_id_from, device_id_to); + CallPolicyManagerFunction( + &PolicyManager::OnDeviceSwitching, device_id_from, device_id_to); } void PolicyHandler::OnGetStatusUpdate(const uint32_t correlation_id) { @@ -921,16 +918,15 @@ std::string PolicyHandler::OnCurrentDeviceIdUpdateRequired( void PolicyHandler::OnSystemInfoChanged(const std::string& language) { POLICY_LIB_CHECK_VOID(); - sync_primitives::AutoLock lock(policy_manager_lock_); - policy_manager_->SetSystemLanguage(language); + CallPolicyManagerFunction(&PolicyManager::SetSystemLanguage, language); } void PolicyHandler::OnGetSystemInfo(const std::string& ccpu_version, const std::string& wers_country_code, const std::string& language) { POLICY_LIB_CHECK_VOID(); - sync_primitives::AutoLock lock(policy_manager_lock_); - policy_manager_->SetSystemInfo(ccpu_version, wers_country_code, language); + CallPolicyManagerFunction( + &PolicyManager::SetSystemInfo, ccpu_version, wers_country_code, language); } void PolicyHandler::OnSystemInfoUpdateRequired() { @@ -961,8 +957,8 @@ void PolicyHandler::OnVehicleDataUpdated( return; } if (message[strings::msg_params].keyExists(strings::vin)) { - sync_primitives::AutoLock lock(policy_manager_lock_); - policy_manager_->SetVINValue( + CallPolicyManagerFunction( + &PolicyManager::SetVINValue, message[strings::msg_params][strings::vin].asString()); } #else @@ -999,8 +995,8 @@ void PolicyHandler::OnPendingPermissionChange( mobile_apis::AudioStreamingState::NOT_AUDIBLE, mobile_apis::VideoStreamingState::NOT_STREAMABLE, true); - sync_primitives::AutoLock lock(policy_manager_lock_); - policy_manager_->RemovePendingPermissionChanges(policy_app_id); + CallPolicyManagerFunction(&PolicyManager::RemovePendingPermissionChanges, + policy_app_id); return; } @@ -1013,8 +1009,8 @@ void PolicyHandler::OnPendingPermissionChange( MessageHelper::SendOnAppPermissionsChangedNotification( app->app_id(), permissions, application_manager_); - sync_primitives::AutoLock lock(policy_manager_lock_); - policy_manager_->RemovePendingPermissionChanges(policy_app_id); + CallPolicyManagerFunction( + &PolicyManager::RemovePendingPermissionChanges, policy_app_id); // "Break" statement has to be here to continue processing in case of // there is another "true" flag in permissions struct break; @@ -1025,8 +1021,8 @@ void PolicyHandler::OnPendingPermissionChange( MessageHelper::SendOnAppPermissionsChangedNotification( app->app_id(), permissions, application_manager_); - sync_primitives::AutoLock lock(policy_manager_lock_); - policy_manager_->RemovePendingPermissionChanges(policy_app_id); + CallPolicyManagerFunction( + &PolicyManager::RemovePendingPermissionChanges, policy_app_id); } break; } @@ -1048,16 +1044,16 @@ void PolicyHandler::OnPendingPermissionChange( application_manager_.OnAppUnauthorized(app->app_id()); - sync_primitives::AutoLock lock(policy_manager_lock_); - policy_manager_->RemovePendingPermissionChanges(policy_app_id); + CallPolicyManagerFunction(&PolicyManager::RemovePendingPermissionChanges, + policy_app_id); } if (permissions.requestTypeChanged || permissions.requestSubTypeChanged) { MessageHelper::SendOnAppPermissionsChangedNotification( app->app_id(), permissions, application_manager_); - sync_primitives::AutoLock lock(policy_manager_lock_); - policy_manager_->RemovePendingPermissionChanges(policy_app_id); + CallPolicyManagerFunction(&PolicyManager::RemovePendingPermissionChanges, + policy_app_id); } } @@ -1300,8 +1296,7 @@ void PolicyHandler::OnAllowSDLFunctionalityNotification( void PolicyHandler::OnIgnitionCycleOver() { POLICY_LIB_CHECK_VOID(); - sync_primitives::AutoLock lock(policy_manager_lock_); - policy_manager_->IncrementIgnitionCycles(); + CallPolicyManagerFunction(&PolicyManager::IncrementIgnitionCycles); } void PolicyHandler::OnActivateApp(uint32_t connection_key, @@ -1365,8 +1360,8 @@ void PolicyHandler::OnActivateApp(uint32_t connection_key, #else // EXTERNAL_PROPRIETARY_MODE permissions.isSDLAllowed = true; #endif // EXTERNAL_PROPRIETARY_MODE - sync_primitives::AutoLock lock(policy_manager_lock_); - policy_manager_->RemovePendingPermissionChanges(policy_app_id); + CallPolicyManagerFunction(&PolicyManager::RemovePendingPermissionChanges, + policy_app_id); } // If application is revoked it should not be activated // In this case we need to activate application @@ -1387,8 +1382,7 @@ void PolicyHandler::KmsChanged(int kilometers) { POLICY_LIB_CHECK_VOID(); LOG4CXX_DEBUG(logger_, "PolicyHandler::KmsChanged " << kilometers << " kilometers"); - sync_primitives::AutoLock lock(policy_manager_lock_); - policy_manager_->KmsChanged(kilometers); + CallPolicyManagerFunction(&PolicyManager::KmsChanged, kilometers); } void PolicyHandler::PTExchangeAtUserRequest(uint32_t correlation_id) { @@ -1554,8 +1548,8 @@ void PolicyHandler::OnSnapshotCreated(const BinaryMessage& pt_string) { bool PolicyHandler::GetPriority(const std::string& policy_app_id, std::string* priority) const { POLICY_LIB_CHECK(false); - sync_primitives::AutoLock lock(policy_manager_lock_); - return policy_manager_->GetPriority(policy_app_id, priority); + return CallPolicyManagerFunction( + &PolicyManager::GetPriority, policy_app_id, priority); } void PolicyHandler::CheckPermissions( @@ -1580,44 +1574,53 @@ void PolicyHandler::CheckPermissions( << hmi_level << " on device " << device_id << " rpc " << rpc); - sync_primitives::AutoLock lock(policy_manager_lock_); #ifdef EXTERNAL_PROPRIETARY_MODE - policy_manager_->CheckPermissions( - app->policy_app_id(), hmi_level, rpc, rpc_params, result); + CallPolicyManagerFunction(&PolicyManager::CheckPermissions, + app->policy_app_id(), + hmi_level, + rpc, + rpc_params, + result); #else // EXTERNAL_PROPRIETARY_MODE - policy_manager_->CheckPermissions( - device_id, app->policy_app_id(), hmi_level, rpc, rpc_params, result); + CallPolicyManagerFunction(&PolicyManager::CheckPermissions, + device_id, + app->policy_app_id(), + hmi_level, + rpc, + rpc_params, + result); #endif // EXTERNAL_PROPRIETARY_MODE } uint32_t PolicyHandler::GetNotificationsNumber( const std::string& priority) const { POLICY_LIB_CHECK(0); - sync_primitives::AutoLock lock(policy_manager_lock_); - return policy_manager_->GetNotificationsNumber(priority); + return CallPolicyManagerFunction(&PolicyManager::GetNotificationsNumber, + priority); } DeviceConsent PolicyHandler::GetUserConsentForDevice( const std::string& device_id) const { POLICY_LIB_CHECK(kDeviceDisallowed); - sync_primitives::AutoLock lock(policy_manager_lock_); - return policy_manager_->GetUserConsentForDevice(device_id); + return CallPolicyManagerFunction(&PolicyManager::GetUserConsentForDevice, + device_id); } bool PolicyHandler::GetDefaultHmi(const std::string& policy_app_id, std::string* default_hmi) const { POLICY_LIB_CHECK(false); - sync_primitives::AutoLock lock(policy_manager_lock_); - return policy_manager_->GetDefaultHmi(policy_app_id, default_hmi); + return CallPolicyManagerFunction( + &PolicyManager::GetDefaultHmi, policy_app_id, default_hmi); } bool PolicyHandler::GetInitialAppData(const std::string& application_id, StringArray* nicknames, StringArray* app_hmi_types) { POLICY_LIB_CHECK(false); - sync_primitives::AutoLock lock(policy_manager_lock_); - return policy_manager_->GetInitialAppData( - application_id, nicknames, app_hmi_types); + return CallPolicyManagerFunction(&PolicyManager::GetInitialAppData, + application_id, + nicknames, + app_hmi_types); } void PolicyHandler::GetUpdateUrls(const std::string& service_type, @@ -1636,14 +1639,12 @@ void PolicyHandler::GetUpdateUrls(const uint32_t service_type, std::string PolicyHandler::GetLockScreenIconUrl() const { POLICY_LIB_CHECK(std::string("")); - sync_primitives::AutoLock lock(policy_manager_lock_); - return policy_manager_->GetLockScreenIconUrl(); + return CallPolicyManagerFunction(&PolicyManager::GetLockScreenIconUrl); } uint32_t PolicyHandler::NextRetryTimeout() { POLICY_LIB_CHECK(0); - sync_primitives::AutoLock lock(policy_manager_lock_); - return policy_manager_->NextRetryTimeout(); + return CallPolicyManagerFunction(&PolicyManager::NextRetryTimeout); } uint32_t PolicyHandler::TimeoutExchangeSec() const { @@ -1652,26 +1653,22 @@ uint32_t PolicyHandler::TimeoutExchangeSec() const { uint32_t PolicyHandler::TimeoutExchangeMSec() const { POLICY_LIB_CHECK(0); - sync_primitives::AutoLock lock(policy_manager_lock_); - return policy_manager_->TimeoutExchangeMSec(); + return CallPolicyManagerFunction(&PolicyManager::TimeoutExchangeMSec); } void PolicyHandler::OnExceededTimeout() { POLICY_LIB_CHECK_VOID(); - sync_primitives::AutoLock lock(policy_manager_lock_); - policy_manager_->OnExceededTimeout(); + CallPolicyManagerFunction(&PolicyManager::OnExceededTimeout); } void PolicyHandler::OnSystemReady() { POLICY_LIB_CHECK_VOID(); - sync_primitives::AutoLock lock(policy_manager_lock_); - policy_manager_->OnSystemReady(); + CallPolicyManagerFunction(&PolicyManager::OnSystemReady); } void PolicyHandler::PTUpdatedAt(Counters counter, int value) { POLICY_LIB_CHECK_VOID(); - sync_primitives::AutoLock lock(policy_manager_lock_); - policy_manager_->PTUpdatedAt(counter, value); + CallPolicyManagerFunction(&PolicyManager::PTUpdatedAt, counter, value); } void PolicyHandler::add_listener(PolicyHandlerObserver* listener) { @@ -1873,26 +1870,25 @@ void PolicyHandler::RemoveDevice(const std::string& device_id) { bool PolicyHandler::IsApplicationRevoked(const std::string& app_id) { POLICY_LIB_CHECK(false); - sync_primitives::AutoLock lock(policy_manager_lock_); - return policy_manager_->IsApplicationRevoked(app_id); + return CallPolicyManagerFunction(&PolicyManager::IsApplicationRevoked, + app_id); } void PolicyHandler::OnUpdateRequestSentToMobile() { POLICY_LIB_CHECK_VOID(); - sync_primitives::AutoLock lock(policy_manager_lock_); - policy_manager_->OnUpdateStarted(); + CallPolicyManagerFunction(&PolicyManager::OnUpdateStarted); } bool PolicyHandler::CheckKeepContext(const std::string& policy_app_id) const { POLICY_LIB_CHECK(false); - sync_primitives::AutoLock lock(policy_manager_lock_); - return policy_manager_->CanAppKeepContext(policy_app_id); + return CallPolicyManagerFunction(&PolicyManager::CanAppKeepContext, + policy_app_id); } bool PolicyHandler::CheckStealFocus(const std::string& policy_app_id) const { POLICY_LIB_CHECK(false); - sync_primitives::AutoLock lock(policy_manager_lock_); - return policy_manager_->CanAppStealFocus(policy_app_id); + return CallPolicyManagerFunction(&PolicyManager::CanAppStealFocus, + policy_app_id); } bool PolicyHandler::CheckSystemAction( @@ -1916,8 +1912,7 @@ bool PolicyHandler::CheckSystemAction( uint32_t PolicyHandler::HeartBeatTimeout(const std::string& app_id) const { POLICY_LIB_CHECK(0); - sync_primitives::AutoLock lock(policy_manager_lock_); - return policy_manager_->HeartBeatTimeout(app_id); + return CallPolicyManagerFunction(&PolicyManager::HeartBeatTimeout, app_id); } const std::string PolicyHandler::RemoteAppsUrl() const { @@ -1935,34 +1930,32 @@ const std::string PolicyHandler::RemoteAppsUrl() const { void PolicyHandler::OnAppsSearchStarted() { POLICY_LIB_CHECK(); - sync_primitives::AutoLock lock(policy_manager_lock_); - policy_manager_->OnAppsSearchStarted(); + CallPolicyManagerFunction(&PolicyManager::OnAppsSearchStarted); } void PolicyHandler::OnAppsSearchCompleted(const bool trigger_ptu) { POLICY_LIB_CHECK(); - sync_primitives::AutoLock lock(policy_manager_lock_); - policy_manager_->OnAppsSearchCompleted(trigger_ptu); + CallPolicyManagerFunction(&PolicyManager::OnAppsSearchCompleted, trigger_ptu); } void PolicyHandler::OnAppRegisteredOnMobile(const std::string& application_id) { POLICY_LIB_CHECK_VOID(); - sync_primitives::AutoLock lock(policy_manager_lock_); - policy_manager_->OnAppRegisteredOnMobile(application_id); + CallPolicyManagerFunction(&PolicyManager::OnAppRegisteredOnMobile, + application_id); } RequestType::State PolicyHandler::GetAppRequestTypeState( const std::string& policy_app_id) const { POLICY_LIB_CHECK(RequestType::State::UNAVAILABLE); - sync_primitives::AutoLock lock(policy_manager_lock_); - return policy_manager_->GetAppRequestTypesState(policy_app_id); + return CallPolicyManagerFunction(&PolicyManager::GetAppRequestTypesState, + policy_app_id); } RequestSubType::State PolicyHandler::GetAppRequestSubTypeState( const std::string& policy_app_id) const { POLICY_LIB_CHECK(RequestSubType::State::UNAVAILABLE); - sync_primitives::AutoLock lock(policy_manager_lock_); - return policy_manager_->GetAppRequestSubTypesState(policy_app_id); + return CallPolicyManagerFunction(&PolicyManager::GetAppRequestSubTypesState, + policy_app_id); } bool PolicyHandler::IsRequestTypeAllowed( @@ -2045,8 +2038,8 @@ bool PolicyHandler::IsRequestSubTypeAllowed( const std::vector PolicyHandler::GetAppRequestTypes( const std::string& policy_app_id) const { POLICY_LIB_CHECK(std::vector()); - sync_primitives::AutoLock lock(policy_manager_lock_); - return policy_manager_->GetAppRequestTypes(policy_app_id); + return CallPolicyManagerFunction(&PolicyManager::GetAppRequestTypes, + policy_app_id); } const std::vector PolicyHandler::GetAppRequestSubTypes( @@ -2057,15 +2050,13 @@ const std::vector PolicyHandler::GetAppRequestSubTypes( const VehicleInfo policy::PolicyHandler::GetVehicleInfo() const { POLICY_LIB_CHECK(VehicleInfo()); - sync_primitives::AutoLock lock(policy_manager_lock_); - return policy_manager_->GetVehicleInfo(); + return CallPolicyManagerFunction(&PolicyManager::GetVehicleInfo); } #ifdef EXTERNAL_PROPRIETARY_MODE const MetaInfo PolicyHandler::GetMetaInfo() const { POLICY_LIB_CHECK(MetaInfo()); - sync_primitives::AutoLock lock(policy_manager_lock_); - return policy_manager_->GetMetaInfo(); + return CallPolicyManagerFunction(&PolicyManager::GetMetaInfo); } #endif // EXTERNAL_PROPRIETARY_MODE @@ -2086,16 +2077,15 @@ void PolicyHandler::Set(const std::string& app_id, usage_statistics::AppInfoId type, const std::string& value) { POLICY_LIB_CHECK(); - sync_primitives::AutoLock lock(policy_manager_lock_); - policy_manager_->Set(app_id, type, value); + CallPolicyManagerFunction(&PolicyManager::Set, app_id, type, value); } void PolicyHandler::Add(const std::string& app_id, usage_statistics::AppStopwatchId type, int32_t timespan_seconds) { POLICY_LIB_CHECK(); - sync_primitives::AutoLock lock(policy_manager_lock_); - policy_manager_->Add(app_id, type, timespan_seconds); + CallPolicyManagerFunction( + &PolicyManager::Add, app_id, type, timespan_seconds); } bool PolicyHandler::IsUrlAppIdValid(const uint32_t app_idx, @@ -2141,15 +2131,14 @@ void PolicyHandler::UpdateHMILevel(ApplicationSharedPtr app, bool PolicyHandler::CheckModule(const PTString& app_id, const PTString& module) { POLICY_LIB_CHECK(false); - sync_primitives::AutoLock lock(policy_manager_lock_); - return policy_manager_->CheckModule(app_id, module); + return CallPolicyManagerFunction(&PolicyManager::CheckModule, app_id, module); } void PolicyHandler::OnRemoteAppPermissionsChanged( const std::string& device_id, const std::string& application_id) { POLICY_LIB_CHECK_VOID(); - sync_primitives::AutoLock lock(policy_manager_lock_); - policy_manager_->SendAppPermissionsChanged(device_id, application_id); + CallPolicyManagerFunction( + &PolicyManager::SendAppPermissionsChanged, device_id, application_id); } void PolicyHandler::OnUpdateHMIStatus(const std::string& device_id, @@ -2184,8 +2173,8 @@ void PolicyHandler::OnUpdateHMIStatus(const std::string& device_id, bool PolicyHandler::GetModuleTypes(const std::string& policy_app_id, std::vector* modules) const { POLICY_LIB_CHECK(false); - sync_primitives::AutoLock lock(policy_manager_lock_); - return policy_manager_->GetModuleTypes(policy_app_id, modules); + return CallPolicyManagerFunction( + &PolicyManager::GetModuleTypes, policy_app_id, modules); } void PolicyHandler::SetDefaultHmiTypes( @@ -2201,8 +2190,8 @@ void PolicyHandler::SetDefaultHmiTypes( SmartObjectToInt()); } - sync_primitives::AutoLock lock(policy_manager_lock_); - policy_manager_->SetDefaultHmiTypes(application_id, hmi_types); + CallPolicyManagerFunction( + &PolicyManager::SetDefaultHmiTypes, application_id, hmi_types); } bool PolicyHandler::CheckHMIType(const std::string& application_id, @@ -2250,12 +2239,4 @@ void PolicyHandler::OnUpdateHMILevel(const std::string& device_id, UpdateHMILevel(app, level); } -template -auto PolicyHandler::CallPolicyManagerFunction(Func func, Args... args) const - -> decltype((std::declval().* - std::declval())(std::declval()...)) { - sync_primitives::AutoLock lock(policy_manager_lock_); - return ((*policy_manager_).*func)(args...); -} - } // namespace policy