diff --git a/src/appspawn_server.cpp b/src/appspawn_server.cpp index 4f99f948f22bd1a6f192e253985b1df8e4882093..c6068bdbd8f49c695eec2c6689f11244c2b2340d 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 694b3e438af80535e6b63f33ac0c12cdca857470..10f491d17f7b7b4c70abc0b200c2f32c27602b15 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 2df1ee1582165a51f569d6e8d075eb426b7c9b8c..8bc4665dabe3abbbfd749a6973986d91e60bba8a 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",