diff --git a/adapter/uhdf2/host/devhost.c b/adapter/uhdf2/host/devhost.c index ff633388bd8356b18f2bf4c146d55cbf63fae0f5..0e782eda62c1743ba80dc90af9abd9a31bdbc879 100644 --- a/adapter/uhdf2/host/devhost.c +++ b/adapter/uhdf2/host/devhost.c @@ -20,6 +20,7 @@ #include #include #include +#include #include "securec.h" #include "parameter.h" @@ -143,40 +144,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); - 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); - } - + SetHostProperties(argc, argv, hostName); 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); @@ -186,7 +187,6 @@ int main(int argc, char **argv) DevHostDumpDeInit(); return status; } - HdfPowerManagerInit(); struct DevHostServiceFull *fullService = (struct DevHostServiceFull *)instance; struct HdfMessageLooper *looper = &fullService->looper; @@ -194,9 +194,11 @@ int main(int argc, char **argv) HDF_LOGI("%{public}s start loop", hostName); looper->Start(looper); } - HdfPowerManagerExit(); DevHostDumpDeInit(); - HDF_LOGI("hdf device host %{public}s %{public}d exit", hostName, hostId); + HDF_LOGI("hdf device host %{public}s %{public}d %{public}d exit", hostName, hostId, status); + if (strcmp(hostName, "camera_host") == 0) { + _exit(status); + } return status; }