diff --git a/services/include/data_center/form_info/form_info_rdb_storage_mgr.h b/services/include/data_center/form_info/form_info_rdb_storage_mgr.h index 6ddab145eecda43f703eeecfa7c4842f1aaf0ad6..cda25b3c0c46501398854a0c49cae4990fa406ae 100644 --- a/services/include/data_center/form_info/form_info_rdb_storage_mgr.h +++ b/services/include/data_center/form_info/form_info_rdb_storage_mgr.h @@ -104,7 +104,7 @@ public: * @return Returns ERR_OK on success, others on failure. */ ErrCode GetFormVersionCode(std::string &versionCode); - + /** * @brief Save or update the version code of form in DB. * @return Returns ERR_OK on success, others on failure. @@ -114,6 +114,7 @@ private: void SaveEntries(const std::unordered_map &value, std::vector &innerFormInfos); +private: mutable std::mutex rdbStorePtrMutex_; }; } // namespace AppExecFwk diff --git a/services/include/feature/bundle_forbidden/form_bundle_forbid_mgr.h b/services/include/feature/bundle_forbidden/form_bundle_forbid_mgr.h index db2fb924d82f4ed917abdaa8fbc8e669cc7ef706..d559887a84221fe2c260a2ad3dcf0916a99fea27 100644 --- a/services/include/feature/bundle_forbidden/form_bundle_forbid_mgr.h +++ b/services/include/feature/bundle_forbidden/form_bundle_forbid_mgr.h @@ -53,6 +53,14 @@ public: * @param isForbidden True fot forbidden, false for not forbidden. */ void SetBundleForbiddenStatus(const std::string &bundleName, bool isForbidden); + +private: + /** + * @brief check whether bundle forbid mgr is init. + * @return True for inited, false for not init. + */ + bool IsBundleForbidMgrInit(); + private: bool isInitialized_ = false; std::set formBundleForbiddenSet_; diff --git a/services/include/feature/bundle_lock/form_bundle_lock_mgr.h b/services/include/feature/bundle_lock/form_bundle_lock_mgr.h index 2cd2d7e43f844bf97f76a4b959f1ee06ca797e43..62c01686f2ff978d18aff37d0dd6ed90b921715e 100644 --- a/services/include/feature/bundle_lock/form_bundle_lock_mgr.h +++ b/services/include/feature/bundle_lock/form_bundle_lock_mgr.h @@ -67,6 +67,14 @@ public: * @param isProtect True for protect, false for not protect. */ void SetBundleProtectStatus(const std::string &bundleName, bool isProtect); + +private: + /** + * @brief check whether bundle lock mgr is init. + * @return True for inited, false for not init. + */ + bool IsBundleLockMgrInit(); + private: bool isInitialized_ = false; std::set formBundleLockSet_; diff --git a/services/include/feature/bundle_lock/form_exempt_lock_mgr.h b/services/include/feature/bundle_lock/form_exempt_lock_mgr.h index 0d2776af5ae1f1e48178bee974258366fb92fe57..287ef3955f43bcf498862ba0ff4fd0e0e280e68f 100644 --- a/services/include/feature/bundle_lock/form_exempt_lock_mgr.h +++ b/services/include/feature/bundle_lock/form_exempt_lock_mgr.h @@ -53,6 +53,14 @@ public: * @param isExempt True for exempt, false for not exempt. */ void SetExemptLockStatus(int64_t formId, bool isExempt); + +private: + /** + * @brief check whether exempt lock mgr is init. + * @return True for inited, false for not init. + */ + bool IsExemptLockMgrInit(); + private: bool isInitialized_ = false; std::set formExemptLockSet_; diff --git a/services/src/data_center/database/form_rdb_data_mgr.cpp b/services/src/data_center/database/form_rdb_data_mgr.cpp index 5b439813e3216675adff0450fc7701b901eb776e..fce354b29df2011aeba3805d17cd5c73764b1846 100644 --- a/services/src/data_center/database/form_rdb_data_mgr.cpp +++ b/services/src/data_center/database/form_rdb_data_mgr.cpp @@ -115,12 +115,8 @@ ErrCode FormRdbDataMgr::InitFormRdbTable(const FormRdbTableConfig &formRdbTableC std::string createTableSql = !formRdbTableConfig.createTableSql.empty() ? formRdbTableConfig.createTableSql : "CREATE TABLE IF NOT EXISTS " + formRdbTableConfig.tableName + " (KEY TEXT NOT NULL PRIMARY KEY, VALUE TEXT NOT NULL);"; - int32_t ret = NativeRdb::E_OK; - { - std::shared_lock guard(rdbStoreMutex_); - ret = rdbStore_->ExecuteSql(createTableSql); - } + int32_t ret = rdbStore_->ExecuteSql(createTableSql); if (ret != NativeRdb::E_OK) { HILOG_ERROR("Create rdb table failed, ret:%{public}" PRId32 "", ret); return ERR_APPEXECFWK_FORM_COMMON_CODE; @@ -136,12 +132,7 @@ ErrCode FormRdbDataMgr::ExecuteSql(const std::string &sql) return ERR_APPEXECFWK_FORM_COMMON_CODE; } - int32_t ret = NativeRdb::E_OK; - { - std::shared_lock guard(rdbStoreMutex_); - ret = rdbStore_->ExecuteSql(sql); - } - + int32_t ret = rdbStore_->ExecuteSql(sql); if (ret == NativeRdb::E_OK) { if (rdbStore_->IsSlaveDiffFromMaster()) { auto backupRet = rdbStore_->Backup(""); @@ -150,7 +141,6 @@ ErrCode FormRdbDataMgr::ExecuteSql(const std::string &sql) } else { if (CheckAndRebuildRdbStore(ret) == ERR_OK) { HILOG_WARN("Check rdb corrupt,rebuild form rdb successfully"); - std::shared_lock guard(rdbStoreMutex_); ret = rdbStore_->ExecuteSql(sql); } } @@ -179,11 +169,9 @@ ErrCode FormRdbDataMgr::InsertData(const std::string &tableName, const std::stri NativeRdb::ValuesBucket valuesBucket; valuesBucket.PutString(FORM_KEY, key); int32_t ret = NativeRdb::E_OK; - { - int64_t rowId = -1; - ret = rdbStore_->InsertWithConflictResolution(rowId, tableName, valuesBucket, + int64_t rowId = -1; + ret = rdbStore_->InsertWithConflictResolution(rowId, tableName, valuesBucket, NativeRdb::ConflictResolution::ON_CONFLICT_REPLACE); - } if (ret == NativeRdb::E_OK) { if (rdbStore_->IsSlaveDiffFromMaster()) { @@ -223,11 +211,9 @@ ErrCode FormRdbDataMgr::InsertData(const std::string &tableName, const std::stri valuesBucket.PutString(FORM_KEY, key); valuesBucket.PutString(FORM_VALUE, value); int32_t ret = NativeRdb::E_OK; - { - int64_t rowId = -1; - ret = rdbStore_->InsertWithConflictResolution(rowId, tableName, valuesBucket, - NativeRdb::ConflictResolution::ON_CONFLICT_REPLACE); - } + int64_t rowId = -1; + ret = rdbStore_->InsertWithConflictResolution(rowId, tableName, valuesBucket, + NativeRdb::ConflictResolution::ON_CONFLICT_REPLACE); if (ret == NativeRdb::E_OK) { if (rdbStore_->IsSlaveDiffFromMaster()) { @@ -267,10 +253,8 @@ ErrCode FormRdbDataMgr::DeleteData(const std::string &tableName, const std::stri NativeRdb::AbsRdbPredicates absRdbPredicates(tableName); absRdbPredicates.EqualTo(FORM_KEY, key); int32_t ret = NativeRdb::E_OK; - { - int32_t rowId = -1; - ret = rdbStore_->Delete(rowId, absRdbPredicates); - } + int32_t rowId = -1; + ret = rdbStore_->Delete(rowId, absRdbPredicates); if (ret == NativeRdb::E_OK) { if (rdbStore_->IsSlaveDiffFromMaster()) { @@ -309,9 +293,7 @@ ErrCode FormRdbDataMgr::QueryData(const std::string &tableName, const std::strin NativeRdb::AbsRdbPredicates absRdbPredicates(tableName); absRdbPredicates.EqualTo(FORM_KEY, key); - std::shared_lock guard(rdbStoreMutex_); auto absSharedResultSet = rdbStore_->Query(absRdbPredicates, std::vector()); - guard.unlock(); if (absSharedResultSet == nullptr) { HILOG_ERROR("null absSharedResultSet"); @@ -361,9 +343,7 @@ ErrCode FormRdbDataMgr::QueryData(const std::string &tableName, const std::strin NativeRdb::AbsRdbPredicates absRdbPredicates(tableName); absRdbPredicates.BeginsWith(FORM_KEY, key); - std::shared_lock guard(rdbStoreMutex_); auto absSharedResultSet = rdbStore_->Query(absRdbPredicates, std::vector()); - guard.unlock(); if (absSharedResultSet == nullptr) { HILOG_ERROR("null absSharedResultSet"); return ERR_APPEXECFWK_FORM_COMMON_CODE; @@ -543,8 +523,6 @@ std::shared_ptr FormRdbDataMgr::QueryData( HILOG_ERROR("null FormInfoRdbStore"); return nullptr; } - - std::shared_lock guard(rdbStoreMutex_); return rdbStore_->Query(absRdbPredicates, std::vector()); } @@ -555,7 +533,6 @@ std::shared_ptr FormRdbDataMgr::QuerySql(const st HILOG_ERROR("null FormInfoRdbStore"); return nullptr; } - std::shared_lock guard(rdbStoreMutex_); return rdbStore_->QuerySql(sql, std::vector()); } @@ -575,10 +552,8 @@ bool FormRdbDataMgr::InsertData( } int32_t ret = NativeRdb::E_OK; - { - ret = rdbStore_->InsertWithConflictResolution( - rowId, tableName, valuesBucket, NativeRdb::ConflictResolution::ON_CONFLICT_REPLACE); - } + ret = rdbStore_->InsertWithConflictResolution( + rowId, tableName, valuesBucket, NativeRdb::ConflictResolution::ON_CONFLICT_REPLACE); if (ret == NativeRdb::E_OK) { if (rdbStore_->IsSlaveDiffFromMaster()) { @@ -609,10 +584,8 @@ bool FormRdbDataMgr::DeleteData(const NativeRdb::AbsRdbPredicates &absRdbPredica } int32_t ret = NativeRdb::E_OK; - { - int32_t rowId = -1; - ret = rdbStore_->Delete(rowId, absRdbPredicates); - } + int32_t rowId = -1; + ret = rdbStore_->Delete(rowId, absRdbPredicates); if (ret == NativeRdb::E_OK) { if (rdbStore_->IsSlaveDiffFromMaster()) { diff --git a/services/src/data_center/form_info/form_info_rdb_storage_mgr.cpp b/services/src/data_center/form_info/form_info_rdb_storage_mgr.cpp index 46554b4632c0f12fa74f33edd640d21e0cbf5971..00aab8332c8597c04e89d2a5d5fed1d0369ccab1 100644 --- a/services/src/data_center/form_info/form_info_rdb_storage_mgr.cpp +++ b/services/src/data_center/form_info/form_info_rdb_storage_mgr.cpp @@ -53,8 +53,7 @@ ErrCode FormInfoRdbStorageMgr::LoadFormInfos(std::vector value; - ErrCode result = FormRdbDataMgr::GetInstance().QueryData(Constants::FORM_RDB_TABLE_NAME, - FORM_INFO_PREFIX, value); + ErrCode result = FormRdbDataMgr::GetInstance().QueryData(Constants::FORM_RDB_TABLE_NAME, FORM_INFO_PREFIX, value); if (result != ERR_OK) { HILOG_ERROR("get entries error"); FormEventReport::SendFormFailedEvent(FormEventName::CALLEN_DB_FAILED, HiSysEventType::FAULT, @@ -79,12 +78,7 @@ ErrCode FormInfoRdbStorageMgr::RemoveBundleFormInfos(const std::string &bundleNa HILOG_DEBUG("FormInfoRdbStorageMgr remove form info, bundleName=%{public}s", bundleName.c_str()); std::string key = std::string().append(FORM_INFO_PREFIX).append(bundleName); - ErrCode result; - { - std::lock_guard lock(rdbStorePtrMutex_); - result = FormRdbDataMgr::GetInstance().DeleteData(Constants::FORM_RDB_TABLE_NAME, key); - } - + ErrCode result = FormRdbDataMgr::GetInstance().DeleteData(Constants::FORM_RDB_TABLE_NAME, key); if (result != ERR_OK) { HILOG_ERROR("remove formInfoStorages from rdbStore error"); return ERR_APPEXECFWK_FORM_COMMON_CODE; @@ -101,7 +95,6 @@ ErrCode FormInfoRdbStorageMgr::UpdateBundleFormInfos(const std::string &bundleNa HILOG_DEBUG("FormInfoRdbStorageMgr update form info, bundleName=%{public}s", bundleName.c_str()); std::string key = std::string().append(FORM_INFO_PREFIX).append(bundleName); - std::lock_guard lock(rdbStorePtrMutex_); std::string value = formInfoStorages; ErrCode result = FormRdbDataMgr::GetInstance().InsertData(Constants::FORM_RDB_TABLE_NAME, key, value); if (result != ERR_OK) { @@ -135,10 +128,7 @@ ErrCode FormInfoRdbStorageMgr::LoadFormData(std::vector &innerFor HILOG_DEBUG("call"); ErrCode result; std::unordered_map value; - { - std::lock_guard lock(rdbStorePtrMutex_); - result = FormRdbDataMgr::GetInstance().QueryData(Constants::FORM_RDB_TABLE_NAME, FORM_ID_PREFIX, value); - } + result = FormRdbDataMgr::GetInstance().QueryData(Constants::FORM_RDB_TABLE_NAME, FORM_ID_PREFIX, value); if (result != ERR_OK) { HILOG_ERROR("get entries error"); FormEventReport::SendFormFailedEvent(FormEventName::CALLEN_DB_FAILED, HiSysEventType::FAULT, @@ -157,11 +147,7 @@ ErrCode FormInfoRdbStorageMgr::SaveStorageFormData(const InnerFormInfo &innerFor std::string formId = std::to_string(innerFormInfo.GetFormId()); std::string key = std::string().append(FORM_ID_PREFIX).append(formId); std::string value = innerFormInfo.ToString(); - ErrCode result; - { - std::lock_guard lock(rdbStorePtrMutex_); - result = FormRdbDataMgr::GetInstance().InsertData(Constants::FORM_RDB_TABLE_NAME, key, value); - } + ErrCode result = FormRdbDataMgr::GetInstance().InsertData(Constants::FORM_RDB_TABLE_NAME, key, value); if (result != ERR_OK) { HILOG_ERROR("put innerFormInfo to RdbStore error"); FormEventReport::SendFormFailedEvent(FormEventName::CALLEN_DB_FAILED, HiSysEventType::FAULT, @@ -187,12 +173,7 @@ ErrCode FormInfoRdbStorageMgr::DeleteStorageFormData(const std::string &formId) { HILOG_DEBUG("formId[%{public}s]", formId.c_str()); std::string key = std::string().append(FORM_ID_PREFIX).append(formId); - ErrCode result; - { - std::lock_guard lock(rdbStorePtrMutex_); - result = FormRdbDataMgr::GetInstance().DeleteData(Constants::FORM_RDB_TABLE_NAME, key); - } - + ErrCode result = FormRdbDataMgr::GetInstance().DeleteData(Constants::FORM_RDB_TABLE_NAME, key); if (result != ERR_OK) { HILOG_ERROR("delete key error"); FormEventReport::SendFormFailedEvent(FormEventName::CALLEN_DB_FAILED, HiSysEventType::FAULT, @@ -201,10 +182,7 @@ ErrCode FormInfoRdbStorageMgr::DeleteStorageFormData(const std::string &formId) } key = std::string().append(STATUS_DATA_PREFIX).append(formId); - { - std::lock_guard lock(rdbStorePtrMutex_); - result = FormRdbDataMgr::GetInstance().DeleteData(Constants::FORM_RDB_TABLE_NAME, key); - } + result = FormRdbDataMgr::GetInstance().DeleteData(Constants::FORM_RDB_TABLE_NAME, key); if (result != ERR_OK) { HILOG_ERROR("delete status data of %{public}s failed", formId.c_str()); FormEventReport::SendFormFailedEvent(FormEventName::CALLEN_DB_FAILED, HiSysEventType::FAULT, @@ -270,7 +248,7 @@ ErrCode FormInfoRdbStorageMgr::GetFormVersionCode(std::string &versionCode) HILOG_INFO("get form version code success. versionCode:%{public}s", versionCode.c_str()); return ERR_OK; } - + ErrCode FormInfoRdbStorageMgr::UpdateFormVersionCode() { HILOG_INFO("call. versioncode:%{public}d", Constants::FORM_VERSION_CODE); diff --git a/services/src/feature/bundle_forbidden/form_bundle_forbid_mgr.cpp b/services/src/feature/bundle_forbidden/form_bundle_forbid_mgr.cpp index 6a4bad65999b53e0bf16daffca4492314054cc0f..50c7d7b328d677372810be89d56b4eba0709326e 100644 --- a/services/src/feature/bundle_forbidden/form_bundle_forbid_mgr.cpp +++ b/services/src/feature/bundle_forbidden/form_bundle_forbid_mgr.cpp @@ -57,12 +57,8 @@ bool FormBundleForbidMgr::IsBundleForbidden(const std::string &bundleName) return false; } - { - std::unique_lock lock(bundleForbiddenSetMutex_); - if (!isInitialized_ && !Init()) { - HILOG_ERROR("Form bundle forbid mgr not init"); - return false; - } + if (!IsBundleForbidMgrInit()) { + return false; } std::shared_lock lock(bundleForbiddenSetMutex_); @@ -92,5 +88,15 @@ void FormBundleForbidMgr::SetBundleForbiddenStatus(const std::string &bundleName FormRdbDataMgr::GetInstance().DeleteData(FORBIDDEN_FORM_BUNDLE_TABLE, bundleName); } } + +bool FormBundleForbidMgr::IsBundleForbidMgrInit() +{ + std::unique_lock lock(bundleForbiddenSetMutex_); + if (!isInitialized_ && !Init()) { + HILOG_ERROR("Form bundle forbid mgr not init"); + return false; + } + return true; +} } // namespace AppExecFwk } // namespace OHOS diff --git a/services/src/feature/bundle_lock/form_bundle_lock_mgr.cpp b/services/src/feature/bundle_lock/form_bundle_lock_mgr.cpp index c20f51199342a7280d0ea496261f479d4fbfc3d8..4d15454e0af390e34ae0fc1a9645142477077828 100644 --- a/services/src/feature/bundle_lock/form_bundle_lock_mgr.cpp +++ b/services/src/feature/bundle_lock/form_bundle_lock_mgr.cpp @@ -58,26 +58,22 @@ bool FormBundleLockMgr::IsBundleLock(const std::string &bundleName, int64_t form if (FormUtil::GetCurrentAccountId() != DEFAULT_USER_ID) { return false; } - + if (formId != 0) { bool lockStatus = false; FormDataMgr::GetInstance().GetFormLock(formId, lockStatus); return lockStatus; } - + if (bundleName.empty()) { HILOG_ERROR("invalid bundleName"); return false; } - - { - std::unique_lock lock(bundleLockSetMutex_); - if (!isInitialized_ && !Init()) { - HILOG_ERROR("Form bundle lock mgr not init"); - return false; - } + + if (!IsBundleLockMgrInit()) { + return false; } - + std::shared_lock lock(bundleLockSetMutex_); auto iter = formBundleLockSet_.find(bundleName); return iter != formBundleLockSet_.end(); @@ -145,5 +141,16 @@ void FormBundleLockMgr::SetBundleProtectStatus(const std::string &bundleName, bo HILOG_ERROR("set bundle protect status failed"); } } + +bool FormBundleLockMgr::IsBundleLockMgrInit() +{ + std::unique_lock lock(bundleLockSetMutex_); + if (!isInitialized_ && !Init()) { + HILOG_ERROR("Form bundle lock mgr not init"); + return false; + } + return true; +} + } // namespace AppExecFwk } // namespace OHOS diff --git a/services/src/feature/bundle_lock/form_exempt_lock_mgr.cpp b/services/src/feature/bundle_lock/form_exempt_lock_mgr.cpp index f638c96a13e60b564b12bb0c9865077a37b2337c..ac51f8081b37c26d46e98f337f2adc44ce3a89cc 100644 --- a/services/src/feature/bundle_lock/form_exempt_lock_mgr.cpp +++ b/services/src/feature/bundle_lock/form_exempt_lock_mgr.cpp @@ -55,12 +55,9 @@ bool FormExemptLockMgr::Init() bool FormExemptLockMgr::IsExemptLock(int64_t formId) { std::string formId_s = std::to_string(formId); - { - std::unique_lock lock(exemptLockSetMutex_); - if (!isInitialized_ && !Init()) { - HILOG_ERROR("Form exempt lock mgr not init"); - return false; - } + if (!IsExemptLockMgrInit()) { + HILOG_ERROR("Form exempt lock mgr not init"); + return false; } std::shared_lock lock(exemptLockSetMutex_); @@ -86,5 +83,15 @@ void FormExemptLockMgr::SetExemptLockStatus(int64_t formId, bool isExempt) FormRdbDataMgr::GetInstance().DeleteData(LOCK_FORM_EXEMPT_TABLE, formId_s); } } + +bool FormExemptLockMgr::IsExemptLockMgrInit() +{ + std::unique_lock lock(exemptLockSetMutex_); + if (!isInitialized_ && !Init()) { + HILOG_ERROR("Form bundle lock mgr not init"); + return false; + } + return true; +} } // namespace AppExecFwk } // namespace OHOS