waitpid: use event instead of busy loop when waiting for threads to die

This commit is contained in:
Matheus
2026-04-16 22:41:43 -03:00
parent 4e3c41df39
commit 3dfb6b5a8c
4 changed files with 27 additions and 6 deletions
+12 -3
View File
@@ -132,10 +132,19 @@ syscallret_t syscall_waitpid(context_t *context, pid_t pid, int *status, int opt
while (threadlist) {
thread_t *freethread = threadlist;
threadlist = threadlist->procnext;
volatile int *flags = (volatile int *)(&freethread->flags);
// wait until the thread can actually be unallocated
while ((*flags & THREAD_FLAGS_DEAD) == 0)
sched_yield();
eventlistener_t listener;
EVENT_INITLISTENER(&listener);
for (;;) {
EVENT_ATTACH(&listener, &iterator->thread_exit_event);
if (freethread->flags & THREAD_FLAGS_DEAD) {
EVENT_DETACHALL(&listener);
break;
}
EVENT_WAIT(&listener, 0);
EVENT_DETACHALL(&listener);
}
sched_destroythread(freethread);
}