diff options
author | kib <kib@FreeBSD.org> | 2009-08-29 21:53:08 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2009-08-29 21:53:08 +0000 |
commit | d105721a2238d8018e13ee3e8aa7face7a10a2e5 (patch) | |
tree | ac1b3c153ca3423ba66347e6a8bb50406e26038c /sys/kern/kern_proc.c | |
parent | 7e88789784ae0e3126509bacd97d46cc20dbf6f8 (diff) | |
download | FreeBSD-src-d105721a2238d8018e13ee3e8aa7face7a10a2e5.zip FreeBSD-src-d105721a2238d8018e13ee3e8aa7face7a10a2e5.tar.gz |
Reverse r196640 and r196644 for now.
Diffstat (limited to 'sys/kern/kern_proc.c')
-rw-r--r-- | sys/kern/kern_proc.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/sys/kern/kern_proc.c b/sys/kern/kern_proc.c index e012a3e..cdbc012 100644 --- a/sys/kern/kern_proc.c +++ b/sys/kern/kern_proc.c @@ -203,6 +203,14 @@ proc_dtor(void *mem, int size, void *arg) #endif /* Free all OSD associated to this thread. */ osd_thread_exit(td); + + /* Dispose of an alternate kstack, if it exists. + * XXX What if there are more than one thread in the proc? + * The first thread in the proc is special and not + * freed, so you gotta do this here. + */ + if (((p->p_flag & P_KTHREAD) != 0) && (td->td_altkstack != 0)) + vm_thread_dispose_altkstack(td); } EVENTHANDLER_INVOKE(process_dtor, p); if (p->p_ksi != NULL) @@ -759,6 +767,8 @@ fill_kinfo_proc_only(struct proc *p, struct kinfo_proc *kp) FOREACH_THREAD_IN_PROC(p, td0) { if (!TD_IS_SWAPPED(td0)) kp->ki_rssize += td0->td_kstack_pages; + if (td0->td_altkstack_obj != NULL) + kp->ki_rssize += td0->td_altkstack_pages; } kp->ki_swrss = vm->vm_swrss; kp->ki_tsize = vm->vm_tsize; |