mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-10-27 12:48:22 +00:00
waitpid: fix deadlock
This commit is contained in:
@@ -43,8 +43,6 @@ syscallret_t syscall_waitpid(context_t *context, pid_t pid, int *status, int opt
|
|||||||
bool continued = false;
|
bool continued = false;
|
||||||
bool stopped = false;
|
bool stopped = false;
|
||||||
bool zombie = false;
|
bool zombie = false;
|
||||||
eventlistener_t listener;
|
|
||||||
EVENT_INITLISTENER(&listener);
|
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
if (iterator == NULL) {
|
if (iterator == NULL) {
|
||||||
@@ -61,6 +59,8 @@ syscallret_t syscall_waitpid(context_t *context, pid_t pid, int *status, int opt
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
eventlistener_t listener;
|
||||||
|
EVENT_INITLISTENER(&listener);
|
||||||
EVENT_ATTACH(&listener, &proc->child_exit_event);
|
EVENT_ATTACH(&listener, &proc->child_exit_event);
|
||||||
MUTEX_RELEASE(&proc->mutex);
|
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;
|
thread_t *freethread = threadlist;
|
||||||
threadlist = threadlist->procnext;
|
threadlist = threadlist->procnext;
|
||||||
// wait until the thread can actually be unallocated
|
// wait until the thread can actually be unallocated
|
||||||
eventlistener_t listener;
|
|
||||||
EVENT_INITLISTENER(&listener);
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
eventlistener_t listener;
|
||||||
|
EVENT_INITLISTENER(&listener);
|
||||||
EVENT_ATTACH(&listener, &iterator->thread_exit_event);
|
EVENT_ATTACH(&listener, &iterator->thread_exit_event);
|
||||||
if (freethread->flags & THREAD_FLAGS_DEAD) {
|
if (freethread->flags & THREAD_FLAGS_DEAD) {
|
||||||
EVENT_DETACHALL(&listener);
|
EVENT_DETACHALL(&listener);
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
name=astral
|
name=astral
|
||||||
revision=10
|
revision=11
|
||||||
from_source=astral
|
from_source=astral
|
||||||
imagedeps="build-essential nasm"
|
imagedeps="build-essential nasm"
|
||||||
hostdeps="xgcc xbinutils limine"
|
hostdeps="xgcc xbinutils limine"
|
||||||
|
|||||||
Reference in New Issue
Block a user