Print this page
OS-4144 panic in lx_freelwp during zone shutdown
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>

*** 25,35 **** /* Copyright (c) 1988 AT&T */ /* All Rights Reserved */ /* ! * Copyright (c) 2013, Joyent, Inc. All rights reserved. */ #include <sys/types.h> #include <sys/param.h> #include <sys/sysmacros.h> --- 25,35 ---- /* Copyright (c) 1988 AT&T */ /* All Rights Reserved */ /* ! * Copyright 2015, Joyent, Inc. */ #include <sys/types.h> #include <sys/param.h> #include <sys/sysmacros.h>
*** 155,165 **** boolean_t in_arg; int argc = 0; int error = 0, count = 0; proc_t *p = ttoproc(curthread); klwp_t *lwp = ttolwp(curthread); ! int brand_action; if (args == NULL) args = ""; alen = strlen(initpath) + 1 + strlen(args) + 1; --- 155,165 ---- boolean_t in_arg; int argc = 0; int error = 0, count = 0; proc_t *p = ttoproc(curthread); klwp_t *lwp = ttolwp(curthread); ! int brand_action = EBA_NONE; if (args == NULL) args = ""; alen = strlen(initpath) + 1 + strlen(args) + 1;
*** 266,276 **** * parent process's signal mask. Clear it now so that we behave in * the same way as when started from the global zone. */ sigemptyset(&curthread->t_hold); ! brand_action = ZONE_IS_BRANDED(p->p_zone) ? EBA_BRAND : EBA_NONE; again: error = exec_common((const char *)(uintptr_t)exec_fnamep, (const char **)(uintptr_t)uap, NULL, brand_action); /* --- 266,284 ---- * parent process's signal mask. Clear it now so that we behave in * the same way as when started from the global zone. */ sigemptyset(&curthread->t_hold); ! /* ! * Only instruct exec_common to brand the process if necessary. It is ! * possible that the init process is already properly branded due to the ! * proc_exit -> restart_init -> exec_init call chain. ! */ ! if (ZONE_IS_BRANDED(p->p_zone) && ! p->p_brand != p->p_zone->zone_brand) { ! brand_action = EBA_BRAND; ! } again: error = exec_common((const char *)(uintptr_t)exec_fnamep, (const char **)(uintptr_t)uap, NULL, brand_action); /*