diff --git a/appexecfwk.gni b/appexecfwk.gni index 87c352a46799289b95c6569639456c31a15088ce..70f91e4a44243b6f6aa020b32f38750cb8dfeb04 100644 --- a/appexecfwk.gni +++ b/appexecfwk.gni @@ -70,6 +70,7 @@ declare_args() { bms_device_info_manager_part_enabled = true app_domain_verify_enabled = true device_usage_statistics_enabled = true + dfx_sigdump_handler_enabled = true if (defined(global_parts_info) && !defined(global_parts_info.resourceschedule_device_usage_statistics)) { @@ -181,6 +182,11 @@ declare_args() { !defined(global_parts_info.bundlemanager_app_domain_verify)) { app_domain_verify_enabled = false } + + if (defined(global_parts_info) && + !defined(global_parts_info.hiviewdfx_faultloggerd)) { + dfx_sigdump_handler_enabled = false + } } print("bundle_framework_power_mgr_enable = " + diff --git a/bundle.json b/bundle.json index 392da864a4d14c3d901a5da90541eeb33f9266a5..b4a59f6d66c90d30a0c294f4d168bf973ae6821a 100644 --- a/bundle.json +++ b/bundle.json @@ -52,6 +52,7 @@ "display_manager", "ecological_rule_manager", "eventhandler", + "faultloggerd", "ffrt", "hisysevent", "hitrace", diff --git a/services/bundlemgr/BUILD.gn b/services/bundlemgr/BUILD.gn index 1309f3919a261fea403c3bcba8a212d04ede056c..6c9850a7687687250c5f8ca8ddf2aff0ffa6206b 100644 --- a/services/bundlemgr/BUILD.gn +++ b/services/bundlemgr/BUILD.gn @@ -508,6 +508,11 @@ ohos_shared_library("installs") { cflags += [ "-DWITH_SELINUX" ] } + if (dfx_sigdump_handler_enabled) { + external_deps += [ "faultloggerd:dfx_sigdump_handler" ] + defines += [ "DFX_SIGDUMP_HANDLER_ENABLE" ] + } + install_enable = true subsystem_name = "bundlemanager" part_name = "bundle_framework" diff --git a/services/bundlemgr/include/installd/installd_service.h b/services/bundlemgr/include/installd/installd_service.h index a5dfb4ee1a12f68f1cde5d9651b49cf889666cfe..e65ed41a8799e06c2ae6266fe7ba78e6a714112a 100644 --- a/services/bundlemgr/include/installd/installd_service.h +++ b/services/bundlemgr/include/installd/installd_service.h @@ -69,8 +69,6 @@ private: */ bool InitDir(const std::string &path); - void DisableDfx(); - private: bool isReady_ = false; sptr hostImpl_; diff --git a/services/bundlemgr/src/installd/installd_service.cpp b/services/bundlemgr/src/installd/installd_service.cpp index f307fea30a196c14b54a504cc1d940d781faa794..90259995dd0a685924a642b66db1a3b204602914 100644 --- a/services/bundlemgr/src/installd/installd_service.cpp +++ b/services/bundlemgr/src/installd/installd_service.cpp @@ -16,7 +16,6 @@ #include "installd/installd_service.h" #include -#include #include #include #include @@ -30,13 +29,16 @@ #include "system_ability_definition.h" #include "system_ability_helper.h" +#ifdef DFX_SIGDUMP_HANDLER_ENABLE +#include "dfx_sigdump_handler.h" +#endif + using namespace std::chrono_literals; namespace OHOS { namespace AppExecFwk { namespace { constexpr unsigned int INSTALLD_UMASK = 0000; -constexpr int32_t DFX_SIGNAL = 35; } REGISTER_SYSTEM_ABILITY_BY_ID(InstalldService, INSTALLD_SERVICE_ID, true); @@ -63,11 +65,17 @@ void InstalldService::OnStart() if (!Publish(hostImpl_)) { LOG_E(BMS_TAG_INSTALLD, "Publish failed"); } +#ifdef DFX_SIGDUMP_HANDLER_ENABLE + InitSigDumpHandler(); +#endif } void InstalldService::OnStop() { Stop(); +#ifdef DFX_SIGDUMP_HANDLER_ENABLE + DeinitSigDumpHandler(); +#endif LOG_I(BMS_TAG_INSTALLD, "installd OnStop"); } @@ -128,13 +136,5 @@ void InstalldService::Stop() isReady_ = false; LOG_I(BMS_TAG_INSTALLD, "installd service stop successfully"); } - -__attribute__((constructor)) void InstalldService::DisableDfx() -{ - sigset_t set; - sigemptyset(&set); - sigaddset(&set, DFX_SIGNAL); - sigprocmask(SIG_BLOCK, &set, NULL); -} } // namespace AppExecFwk } // namespace OHOS \ No newline at end of file diff --git a/services/bundlemgr/test/mock/include/installd_service.h b/services/bundlemgr/test/mock/include/installd_service.h index 4e8cd96c46eb27b5e894e817b1aa41cd73c70bb1..48995150afc617c787b6bb39f86ca61ec522049c 100644 --- a/services/bundlemgr/test/mock/include/installd_service.h +++ b/services/bundlemgr/test/mock/include/installd_service.h @@ -69,8 +69,6 @@ private: */ bool InitDir(const std::string &path); - void DisableDfx(); - private: bool isReady_ = false; sptr hostImpl_; diff --git a/services/bundlemgr/test/mock/src/installd_service.cpp b/services/bundlemgr/test/mock/src/installd_service.cpp index 8ce37ea114d5c1787ff0b6fe9a70107e0725bd60..a058ea38d4bcd84af16ede09ef8ebb845213845c 100644 --- a/services/bundlemgr/test/mock/src/installd_service.cpp +++ b/services/bundlemgr/test/mock/src/installd_service.cpp @@ -16,7 +16,6 @@ #include "installd/installd_service.h" #include -#include #include #include #include @@ -29,13 +28,16 @@ #include "system_ability_definition.h" #include "system_ability_helper.h" +#ifdef DFX_SIGDUMP_HANDLER_ENABLE +#include "dfx_sigdump_handler.h" +#endif + using namespace std::chrono_literals; namespace OHOS { namespace AppExecFwk { namespace { constexpr unsigned int INSTALLD_UMASK = 0000; -constexpr int32_t DFX_SIGNAL = 35; } InstalldService::InstalldService() : SystemAbility(INSTALLD_SERVICE_ID, true) { @@ -54,11 +56,17 @@ void InstalldService::OnStart() if (!Publish(hostImpl_)) { APP_LOGE("Publish failed"); } +#ifdef DFX_SIGDUMP_HANDLER_ENABLE + InitSigDumpHandler(); +#endif } void InstalldService::OnStop() { Stop(); +#ifdef DFX_SIGDUMP_HANDLER_ENABLE + DeinitSigDumpHandler(); +#endif APP_LOGI("installd OnStop"); } @@ -122,13 +130,5 @@ void InstalldService::Stop() isReady_ = false; APP_LOGI("installd service stop successfully"); } - -__attribute__((constructor)) void InstalldService::DisableDfx() -{ - sigset_t set; - sigemptyset(&set); - sigaddset(&set, DFX_SIGNAL); - sigprocmask(SIG_BLOCK, &set, NULL); -} } // namespace AppExecFwk } // namespace OHOS