diff --git a/adapter/uhdf2/host/devhost.c b/adapter/uhdf2/host/devhost.c index ad30405987f938b2e2ee21b38cc5f1f73ce0c66c..74741e14160a07869044ae602e4492b68f982e66 100644 --- a/adapter/uhdf2/host/devhost.c +++ b/adapter/uhdf2/host/devhost.c @@ -20,7 +20,6 @@ #include #include #include -#include #include "securec.h" #include "parameter.h" @@ -144,40 +143,40 @@ static void SetMallopt(int argc, char **argv) return; } -static void SetHostProperties(int argc, char **argv, const char *hostName) -{ - SetProcTitle(argv, hostName); - StartMemoryHook(hostName); - if ((strcmp(argv[DEVHOST_PROCESS_PRI_POS], INVALID_PRIORITY) != 0) && - (strcmp(argv[DEVHOST_THREAD_PRI_POS], INVALID_PRIORITY) != 0)) { - HdfSetProcPriority(argv); - } - if (argc > DEVHOST_MIN_INPUT_PARAM_NUM) { - SetMallopt(argc, argv); - } -} - int main(int argc, char **argv) { if (argc < DEVHOST_MIN_INPUT_PARAM_NUM) { HDF_LOGE("Devhost main parameter error, argc: %{public}d", argc); return HDF_ERR_INVALID_PARAM; } + prctl(PR_SET_PDEATHSIG, SIGKILL); // host process should exit with devmgr process + int hostId = 0; if (!HdfStringToInt(argv[DEVHOST_INPUT_PARAM_HOSTID_POS], &hostId)) { HDF_LOGE("Devhost main parameter error, argv[1]: %{public}s", argv[DEVHOST_INPUT_PARAM_HOSTID_POS]); return HDF_ERR_INVALID_PARAM; } + const char *hostName = argv[DEVHOST_HOST_NAME_POS]; HDF_LOGI("hdf device host %{public}s %{public}d start", hostName, hostId); - SetHostProperties(argc, argv, hostName); + SetProcTitle(argv, hostName); + StartMemoryHook(hostName); + if ((strcmp(argv[DEVHOST_PROCESS_PRI_POS], INVALID_PRIORITY) != 0) && + (strcmp(argv[DEVHOST_THREAD_PRI_POS], INVALID_PRIORITY) != 0)) { + HdfSetProcPriority(argv); + } + if (argc > DEVHOST_MIN_INPUT_PARAM_NUM) { + SetMallopt(argc, argv); + } + struct IDevHostService *instance = DevHostServiceNewInstance(hostId, hostName); if (instance == NULL || instance->StartService == NULL) { HDF_LOGE("DevHostServiceGetInstance fail"); return HDF_ERR_INVALID_OBJECT; } HDF_LOGD("create IDevHostService of %{public}s success", hostName); + DevHostDumpInit(); HDF_LOGD("%{public}s start device service begin", hostName); int status = instance->StartService(instance); @@ -187,6 +186,7 @@ int main(int argc, char **argv) DevHostDumpDeInit(); return status; } + HdfPowerManagerInit(); struct DevHostServiceFull *fullService = (struct DevHostServiceFull *)instance; struct HdfMessageLooper *looper = &fullService->looper; @@ -198,9 +198,6 @@ int main(int argc, char **argv) DevHostServiceFreeInstance(instance); HdfPowerManagerExit(); DevHostDumpDeInit(); - HDF_LOGI("hdf device host %{public}s %{public}d %{public}d exit", hostName, hostId, status); - if (strcmp(hostName, "camera_host") == 0) { - _exit(status); - } + HDF_LOGI("hdf device host %{public}s %{public}d exit", hostName, hostId); return status; }