未验证 提交 920dea00 编写于 作者: O openharmony_ci 提交者: Gitee

!288 fix: 对于 SIGCHLD 以及SIGTERM 信号 做SIG_UNBLOCK 处理

Merge pull request !288 from 熊磊/init129_2
......@@ -225,6 +225,16 @@ static void PublishHoldFds(Service *service)
}
}
static void ClearEnvironment(void)
{
sigset_t mask;
sigemptyset(&mask);
sigaddset(&mask, SIGCHLD);
sigaddset(&mask, SIGTERM);
sigprocmask(SIG_UNBLOCK, &mask, NULL);
return;
}
int ServiceStart(Service *service)
{
INIT_ERROR_CHECK(service != NULL, return SERVICE_FAILURE, "start service failed! null ptr.");
......@@ -252,6 +262,8 @@ int ServiceStart(Service *service)
DoJobNow(service->serviceJobs.jobsName[JOB_ON_START]);
}
(void)ClearEnvironment();
if (!IsOnDemandService(service)) {
int ret = CreateServiceSocket(service);
INIT_ERROR_CHECK(ret >= 0, return SERVICE_FAILURE,
......
......@@ -54,7 +54,7 @@ LE_STATUS LE_CreateSignalTask(const LoopHandle loopHandle, SignalHandle *signalH
LE_CHECK(processSignal != NULL, return LE_FAILURE, "Invalid parameters processSignal");
sigset_t mask;
sigemptyset(&mask);
int sfd = signalfd(-1, &mask, SFD_NONBLOCK);
int sfd = signalfd(-1, &mask, SFD_NONBLOCK | SFD_CLOEXEC);
LE_CHECK(sfd > 0, return -1, "Failed to create signal fd");
LE_BaseInfo info = {TASK_SIGNAL, NULL};
SignalTask *task = (SignalTask *)CreateTask(loopHandle, sfd, &info, sizeof(SignalTask));
......@@ -79,7 +79,7 @@ LE_STATUS LE_AddSignal(const LoopHandle loopHandle, const SignalHandle signalHan
}
sigaddset(&task->mask, signal);
sigprocmask(SIG_BLOCK, &task->mask, NULL);
int sfd = signalfd(GetSocketFd(signalHandle), &task->mask, SFD_NONBLOCK);
int sfd = signalfd(GetSocketFd(signalHandle), &task->mask, SFD_NONBLOCK | SFD_CLOEXEC);
LE_CHECK(sfd > 0, return -1, "Failed to create signal fd");
if (task->sigNumber == 0) {
loop->addEvent(loop, (const BaseTask *)task, Event_Read);
......@@ -101,7 +101,7 @@ LE_STATUS LE_RemoveSignal(const LoopHandle loopHandle, const SignalHandle signal
}
sigdelset(&task->mask, signal);
task->sigNumber--;
int sfd = signalfd(GetSocketFd(signalHandle), &task->mask, SFD_NONBLOCK);
int sfd = signalfd(GetSocketFd(signalHandle), &task->mask, SFD_NONBLOCK | SFD_CLOEXEC);
LE_CHECK(sfd > 0, return -1, "Failed to create signal fd");
if (task->sigNumber <= 0) {
loop->delEvent(loop, GetSocketFd(signalHandle), Event_Read);
......@@ -113,4 +113,4 @@ void LE_CloseSignalTask(const LoopHandle loopHandle, const SignalHandle signalHa
{
LE_CHECK(loopHandle != NULL && signalHandle != NULL, return, "Invalid parameters");
LE_CloseTask(loopHandle, signalHandle);
}
\ No newline at end of file
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册