Use a loop instead of a goto in sysctl_kern_proc_kstack().

MFC after:	3 days
This commit is contained in:
Mark Johnston 2016-04-17 23:22:32 +00:00
parent 0981cbd5fd
commit 11748dae80

View File

@ -2534,10 +2534,8 @@ sysctl_kern_proc_kstack(SYSCTL_HANDLER_ARGS)
st = stack_create();
lwpidarray = NULL;
numthreads = 0;
PROC_LOCK(p);
repeat:
if (numthreads < p->p_numthreads) {
do {
if (lwpidarray != NULL) {
free(lwpidarray, M_TEMP);
lwpidarray = NULL;
@ -2547,9 +2545,7 @@ sysctl_kern_proc_kstack(SYSCTL_HANDLER_ARGS)
lwpidarray = malloc(sizeof(*lwpidarray) * numthreads, M_TEMP,
M_WAITOK | M_ZERO);
PROC_LOCK(p);
goto repeat;
}
i = 0;
} while (numthreads < p->p_numthreads);
/*
* XXXRW: During the below loop, execve(2) and countless other sorts
@ -2560,6 +2556,7 @@ sysctl_kern_proc_kstack(SYSCTL_HANDLER_ARGS)
* have changed, in which case the right to extract debug info might
* no longer be assured.
*/
i = 0;
FOREACH_THREAD_IN_PROC(p, td) {
KASSERT(i < numthreads,
("sysctl_kern_proc_kstack: numthreads"));