diff --git a/sched/sched/sched_waitpid.c b/sched/sched/sched_waitpid.c index 25e326c36f1..484a2ce3307 100644 --- a/sched/sched/sched_waitpid.c +++ b/sched/sched/sched_waitpid.c @@ -93,10 +93,14 @@ int waittcb(FAR struct tcb_s *rtcb, pid_t pid, int options, ret = child->ch_pid; - /* Discard the child entry and break out of the loop */ + /* Discard the child entry unless WNOWAIT is set */ + + if ((options & WNOWAIT) == 0) + { + group_remove_child(rtcb->group, child->ch_pid); + group_free_child(child); + } - group_remove_child(rtcb->group, child->ch_pid); - group_free_child(child); break; } }