From daf2c0a8a7c8636265627fb07b34db334b614fd6 Mon Sep 17 00:00:00 2001 From: xlei1030 Date: Wed, 9 Mar 2022 15:16:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5wagner=20reset=E6=8C=89?= =?UTF-8?q?=E9=94=AE=E9=87=8D=E5=90=AF=E5=A4=B1=E8=B4=A5=20&&=20appspawn?= =?UTF-8?q?=20crash=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: xlei1030 --- src/appspawn_server.cpp | 21 +++++++++++++++++++-- src/include/appspawn_server.h | 2 ++ test/BUILD.gn | 2 +- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/appspawn_server.cpp b/src/appspawn_server.cpp index 4f99f948..c6068bdb 100644 --- a/src/appspawn_server.cpp +++ b/src/appspawn_server.cpp @@ -68,7 +68,7 @@ constexpr int32_t WAIT_DELAY_US = 100 * 1000; // 100ms constexpr int32_t GID_USER_DATA_RW = 1008; constexpr int32_t MAX_GIDS = 64; constexpr int32_t UID_BASE = 200000; -constexpr int32_t WAIT_PARAM_TIME = 1000; +constexpr int32_t WAIT_PARAM_TIME = 5; constexpr std::string_view BUNDLE_NAME_MEDIA_LIBRARY("com.ohos.medialibrary.MediaLibraryDataA"); constexpr std::string_view BUNDLE_NAME_SCANNER("com.ohos.medialibrary.MediaScannerAbilityA"); @@ -172,12 +172,20 @@ void AppSpawnServer::WaitRebootEvent() { APPSPAWN_LOGI("wait 'startup.device.ctl' event"); while (isRunning_) { - int ret = WaitParameter("startup.device.ctl", "stop", WAIT_PARAM_TIME); + int ret = WaitParameter("startup.device.ctl", "stop", WAIT_PARAM_TIME); if (ret == 0) { std::lock_guard lock(mut_); isStop_ = true; dataCond_.notify_one(); break; + } else { + std::string value = OHOS::system::GetParameter("startup.device.ctl", ""); + if (value == "stop") { + std::lock_guard lock(mut_); + isStop_ = true; + dataCond_.notify_one(); + break; + } } } } @@ -344,6 +352,14 @@ int AppSpawnServer::StartApp(char *longProcName, int64_t longProcNameLen, return (buff == ERR_OK) ? 0 : buff; } +void AppSpawnServer::QuickExitMain() +{ +#ifndef TEST_EXIT + quick_exit(0); +#endif + return; +} + bool AppSpawnServer::ServerMain(char *longProcName, int64_t longProcNameLen) { if (socket_->RegisterServerSocket() != 0) { @@ -395,6 +411,7 @@ bool AppSpawnServer::ServerMain(char *longProcName, int64_t longProcNameLen) kill(iter->first, SIGKILL); appMap_.erase(iter); } + QuickExitMain(); return false; } diff --git a/src/include/appspawn_server.h b/src/include/appspawn_server.h index 694b3e43..10f491d1 100644 --- a/src/include/appspawn_server.h +++ b/src/include/appspawn_server.h @@ -193,6 +193,8 @@ private: void WaitRebootEvent(); void HandleSignal(); + + void QuickExitMain(); private: const std::string deviceNull_ = "/dev/null"; std::string socketName_ {}; diff --git a/test/BUILD.gn b/test/BUILD.gn index 2df1ee15..8bc4665d 100644 --- a/test/BUILD.gn +++ b/test/BUILD.gn @@ -35,7 +35,7 @@ group("moduletest") { config("appspawn_test_config") { configs = [] - defines = [] + defines = [ "TEST_EXIT" ] include_dirs = [ "${appspawn_path}/test/mock/include", -- Gitee