diff --git a/kernel/syscall/processctl.c b/kernel/syscall/processctl.c index 326c9f9..049d5ec 100644 --- a/kernel/syscall/processctl.c +++ b/kernel/syscall/processctl.c @@ -9,6 +9,7 @@ #include "path/path.h" #include "kprintf.h" #include "dlmalloc/malloc.h" +#include "ipc/pipe/pipe.h" #define PCTL_MP_MAX 0xff #define PCTL_PATH_MAX VFS_PATH_MAX @@ -66,6 +67,14 @@ int32_t SYSCALL5(sys_processctl, pid1, cmd1, arg1, arg2, arg3) { PROC_ARG(newproc, (*args)[i]); } + for (size_t i = 0; i < PROC_PIPEHANDLES_MAX; i++) { + if (newproc->pipes[i] != NULL) { + ipc_pipefree(newproc->pipes[i]); + dlfree(newproc->pipes[i]); + } + newproc->pipes[i] = proc->pipes[i]; + } + proc_register(newproc); ret = newproc->pid; } break;