[smart] add waitpid(-1) support (#8020)

Signed-off-by: shell <wangxiaoyao@rt-thread.com>
This commit is contained in:
Shell 2023-09-09 09:35:33 +08:00 committed by GitHub
parent 4462106a61
commit b8e332fa2d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 23 additions and 11 deletions

View File

@ -648,21 +648,33 @@ pid_t waitpid(pid_t pid, int *status, int options)
rt_base_t level;
struct rt_thread *thread;
struct rt_lwp *lwp;
struct rt_lwp *lwp_self;
struct rt_lwp *this_lwp;
this_lwp = lwp_self();
if (!this_lwp)
{
goto quit;
}
level = rt_hw_interrupt_disable();
lwp = lwp_from_pid(pid);
if (!lwp)
if (pid == -1)
{
goto quit;
lwp = this_lwp->first_child;
if (!lwp)
goto quit;
else
pid = lwp->pid;
}
else
{
lwp = lwp_from_pid(pid);
if (!lwp)
{
goto quit;
}
}
lwp_self = (struct rt_lwp *)rt_thread_self()->lwp;
if (!lwp_self)
{
goto quit;
}
if (lwp->parent != lwp_self)
if (lwp->parent != this_lwp)
{
goto quit;
}
@ -693,7 +705,7 @@ pid_t waitpid(pid_t pid, int *status, int options)
struct rt_lwp **lwp_node;
*status = lwp->lwp_ret;
lwp_node = &lwp_self->first_child;
lwp_node = &this_lwp->first_child;
while (*lwp_node != lwp)
{
RT_ASSERT(*lwp_node != RT_NULL);