summaryrefslogtreecommitdiff
path: root/src/sys/arch
diff options
context:
space:
mode:
Diffstat (limited to 'src/sys/arch')
-rw-r--r--src/sys/arch/amd64/os/os_proc.c8
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);