!446 init进程收到子进程退出信号后,调用fork重新拉起进程,会导致系统卡死
Merge pull request !446 from zhangfanfan2/master
This commit is contained in:
commit
4adc15e630
|
@ -105,7 +105,15 @@ LITE_OS_SEC_TEXT_INIT VOID *OsTaskStackInit(UINT32 taskID, UINT32 stackSize, VOI
|
||||||
|
|
||||||
LITE_OS_SEC_TEXT VOID OsUserCloneParentStack(VOID *childStack, UINTPTR parentTopOfStack, UINT32 parentStackSize)
|
LITE_OS_SEC_TEXT VOID OsUserCloneParentStack(VOID *childStack, UINTPTR parentTopOfStack, UINT32 parentStackSize)
|
||||||
{
|
{
|
||||||
VOID *cloneStack = (VOID *)(((UINTPTR)parentTopOfStack + parentStackSize) - sizeof(TaskContext));
|
LosTaskCB *task = OsCurrTaskGet();
|
||||||
|
sig_cb *sigcb = &task->sig;
|
||||||
|
VOID *cloneStack = NULL;
|
||||||
|
|
||||||
|
if (sigcb->sigContext != NULL) {
|
||||||
|
cloneStack = (VOID *)((UINTPTR)sigcb->sigContext - sizeof(TaskContext));
|
||||||
|
} else {
|
||||||
|
cloneStack = (VOID *)(((UINTPTR)parentTopOfStack + parentStackSize) - sizeof(TaskContext));
|
||||||
|
}
|
||||||
|
|
||||||
(VOID)memcpy_s(childStack, sizeof(TaskContext), cloneStack, sizeof(TaskContext));
|
(VOID)memcpy_s(childStack, sizeof(TaskContext), cloneStack, sizeof(TaskContext));
|
||||||
((TaskContext *)childStack)->R0 = 0;
|
((TaskContext *)childStack)->R0 = 0;
|
||||||
|
|
|
@ -678,6 +678,7 @@ VOID *OsRestorSignalContext(VOID *sp)
|
||||||
|
|
||||||
LosProcessCB *process = OsCurrProcessGet();
|
LosProcessCB *process = OsCurrProcessGet();
|
||||||
VOID *saveContext = sigcb->sigContext;
|
VOID *saveContext = sigcb->sigContext;
|
||||||
|
sigcb->sigContext = NULL;
|
||||||
sigcb->count--;
|
sigcb->count--;
|
||||||
process->sigShare = 0;
|
process->sigShare = 0;
|
||||||
OsProcessExitCodeSignalClear(process);
|
OsProcessExitCodeSignalClear(process);
|
||||||
|
|
Loading…
Reference in New Issue