From bc8d2f7699a0147afebe453c10b9c45c97087a8a Mon Sep 17 00:00:00 2001 From: laokz Date: Thu, 17 Dec 2020 21:59:39 +0800 Subject: [PATCH] fix wait group waiting/waking code --- kernel/base/core/los_process.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/kernel/base/core/los_process.c b/kernel/base/core/los_process.c index 90cce634..68afe722 100644 --- a/kernel/base/core/los_process.c +++ b/kernel/base/core/los_process.c @@ -205,12 +205,13 @@ STATIC ProcessGroup *OsFindProcessGroup(UINT32 gid) return NULL; } -STATIC LosProcessCB *OsFindGroupExitProcess(ProcessGroup *group, INT32 pid) +STATIC LosProcessCB *OsFindGroupExitProcess(ProcessGroup *group, UINT32 pid) { LosProcessCB *childCB = NULL; + UINT32 ppid = OsCurrProcessGet()->processID; LOS_DL_LIST_FOR_EACH_ENTRY(childCB, &(group->exitProcessList), LosProcessCB, subordinateGroupList) { - if ((childCB->processID == pid) || (pid == OS_INVALID_VALUE)) { + if (childCB->parentProcessID == ppid && (pid == OS_INVALID_VALUE || childCB->processID == pid)) { return childCB; } } @@ -335,6 +336,9 @@ STATIC VOID OsWaitCheckAndWakeParentProcess(LosProcessCB *parentCB, const LosPro if (taskCB->waitFlag == OS_PROCESS_WAIT_GID) { if (taskCB->waitID != processCB->group->groupID) { list = list->pstNext; + if (LOS_ListEmpty(&parentCB->childrenList)) { + OsWaitWakeTask(taskCB, OS_INVALID_VALUE); + } continue; } } -- Gitee