diff options
Diffstat (limited to 'src/sys/arch/amd64/os/os_proc.c')
-rw-r--r-- | src/sys/arch/amd64/os/os_proc.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/sys/arch/amd64/os/os_proc.c b/src/sys/arch/amd64/os/os_proc.c index b8e7c99..f2eb2b3 100644 --- a/src/sys/arch/amd64/os/os_proc.c +++ b/src/sys/arch/amd64/os/os_proc.c @@ -38,6 +38,7 @@ #include <machine/gdt.h> #include <machine/frame.h> #include <machine/lapic.h> +#include <os/kalloc.h> #include <string.h> extern struct proc g_rootproc; @@ -237,6 +238,7 @@ md_proc_kill(struct proc *procp, int flags) { const size_t PSIZE = DEFAULT_PAGESIZE; struct proc *self; + struct penv_blk *envblk; struct pcore *core = this_core(); struct md_pcb *pcbp; struct vm_range *range; @@ -259,6 +261,12 @@ md_proc_kill(struct proc *procp, int flags) vm_free_frame(range->pa_base, range->len / PSIZE); } + if ((envblk = procp->envblk) != NULL) { + ptrbox_terminate(procp->envblk_box); + kfree(envblk->argv); + procp->envblk = NULL; + } + /* Release the VAS */ pcbp = &procp->pcb; mmu_free_vas(&pcbp->vas); |