From d867dc0ad5f736d27e82ec7b0dcc64c6c252ed46 Mon Sep 17 00:00:00 2001 From: Matheus Date: Sat, 23 May 2026 16:57:22 -0300 Subject: [PATCH] waitpid: fix deadlock --- kernel-src/sys/syscalls/waitpid.c | 8 ++++---- recipes/astral | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/kernel-src/sys/syscalls/waitpid.c b/kernel-src/sys/syscalls/waitpid.c index fb1ab756..904e07d9 100644 --- a/kernel-src/sys/syscalls/waitpid.c +++ b/kernel-src/sys/syscalls/waitpid.c @@ -43,8 +43,6 @@ syscallret_t syscall_waitpid(context_t *context, pid_t pid, int *status, int opt bool continued = false; bool stopped = false; bool zombie = false; - eventlistener_t listener; - EVENT_INITLISTENER(&listener); for (;;) { if (iterator == NULL) { @@ -61,6 +59,8 @@ syscallret_t syscall_waitpid(context_t *context, pid_t pid, int *status, int opt return ret; } + eventlistener_t listener; + EVENT_INITLISTENER(&listener); EVENT_ATTACH(&listener, &proc->child_exit_event); MUTEX_RELEASE(&proc->mutex); @@ -133,9 +133,9 @@ syscallret_t syscall_waitpid(context_t *context, pid_t pid, int *status, int opt thread_t *freethread = threadlist; threadlist = threadlist->procnext; // wait until the thread can actually be unallocated - eventlistener_t listener; - EVENT_INITLISTENER(&listener); for (;;) { + eventlistener_t listener; + EVENT_INITLISTENER(&listener); EVENT_ATTACH(&listener, &iterator->thread_exit_event); if (freethread->flags & THREAD_FLAGS_DEAD) { EVENT_DETACHALL(&listener); diff --git a/recipes/astral b/recipes/astral index 8d7ec257..1e1b237f 100644 --- a/recipes/astral +++ b/recipes/astral @@ -1,5 +1,5 @@ name=astral -revision=10 +revision=11 from_source=astral imagedeps="build-essential nasm" hostdeps="xgcc xbinutils limine"