diff --git a/frameworks/native/backup_ext/src/ext_backup_js.cpp b/frameworks/native/backup_ext/src/ext_backup_js.cpp index fee000ebfe0e2e0415b0f6512658bb2cb48fa13c..4d33dbbf51993d7947f29aebd3e1c3fd2188d01f 100644 --- a/frameworks/native/backup_ext/src/ext_backup_js.cpp +++ b/frameworks/native/backup_ext/src/ext_backup_js.cpp @@ -48,7 +48,7 @@ namespace OHOS::FileManagement::Backup { using namespace std; constexpr size_t ARGC_ONE = 1; static std::mutex g_extBackupValidLock; -static bool g_isExtBackupValid = true; +static int32_t g_extBackupCount = 0; static string GetSrcPath(const AppExecFwk::AbilityInfo &info) { @@ -107,8 +107,8 @@ static napi_status DealNapiException(napi_env env, napi_value &exception, std::s static napi_value PromiseCallback(napi_env env, napi_callback_info info) { std::lock_guard lock(g_extBackupValidLock); - if (!g_isExtBackupValid) { - HILOGE("ExtBackup is invalid"); + if (g_extBackupCount <= 0) { + HILOGE("ExtBackup is invalid, count=%{public}d", g_extBackupCount); return nullptr; } HILOGI("Promise callback."); @@ -149,8 +149,8 @@ static napi_value PromiseCatchCallback(napi_env env, napi_callback_info info) return nullptr; } std::lock_guard lock(g_extBackupValidLock); - if (!g_isExtBackupValid) { - HILOGE("ExtBackup is invalid"); + if (g_extBackupCount <= 0) { + HILOGE("ExtBackup is invalid, count=%{public}d", g_extBackupCount); data = nullptr; return nullptr; } @@ -163,8 +163,8 @@ static napi_value PromiseCatchCallback(napi_env env, napi_callback_info info) static napi_value PromiseCallbackEx(napi_env env, napi_callback_info info) { std::lock_guard lock(g_extBackupValidLock); - if (!g_isExtBackupValid) { - HILOGE("ExtBackup is invalid"); + if (g_extBackupCount <= 0) { + HILOGE("ExtBackup is invalid, count=%{public}d", g_extBackupCount); return nullptr; } HILOGI("PromiseEx callback."); @@ -205,8 +205,8 @@ static napi_value PromiseCatchCallbackEx(napi_env env, napi_callback_info info) return nullptr; } std::lock_guard lock(g_extBackupValidLock); - if (!g_isExtBackupValid) { - HILOGE("ExtBackup is invalid"); + if (g_extBackupCount <= 0) { + HILOGE("ExtBackup is invalid, count=%{public}d", g_extBackupCount); data = nullptr; return nullptr; } @@ -449,16 +449,17 @@ napi_value AttachBackupExtensionContext(napi_env env, void *value, void *) ExtBackupJs::ExtBackupJs(AbilityRuntime::JsRuntime &jsRuntime) : jsRuntime_(jsRuntime) { - g_isExtBackupValid = true; - HILOGI("ExtBackupJs::ExtBackupJs."); + std::lock_guard lock(g_extBackupValidLock); + g_extBackupCount += 1; + HILOGI("ExtBackupJs::ExtBackupJs, count=%{public}d.", g_extBackupCount); } ExtBackupJs::~ExtBackupJs() { jsRuntime_.FreeNativeReference(std::move(jsObj_)); std::lock_guard lock(g_extBackupValidLock); - g_isExtBackupValid = false; - HILOGI("ExtBackupJs::~ExtBackupJs."); + g_extBackupCount -= 1; + HILOGI("ExtBackupJs::~ExtBackupJs, count=%{public}d.", g_extBackupCount); } void ExtBackupJs::ExportJsContext(void) diff --git a/services/backup_sa/src/module_ipc/svc_backup_connection.cpp b/services/backup_sa/src/module_ipc/svc_backup_connection.cpp index 048d1f3aa099545b8e988274940dc321709c0844..8fc298baad2d4f88f65a5afeb56611aca122c5a5 100644 --- a/services/backup_sa/src/module_ipc/svc_backup_connection.cpp +++ b/services/backup_sa/src/module_ipc/svc_backup_connection.cpp @@ -125,7 +125,7 @@ ErrCode SvcBackupConnection::DisconnectBackupExtAbility() HILOGE("Dis connect failed"); return false; } - return extPtr->GetBackupExtProxy() == nullptr; + return extPtr->isConnected_.load() == false; }; if (condition_.wait_for(lock, std::chrono::seconds(WAIT_TIME), callback)) { HILOGI("Wait until the connection ends");