From owner-p4-projects@FreeBSD.ORG Sat Jul 29 23:41:38 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 820D216A4E0; Sat, 29 Jul 2006 23:41:38 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 2C94216A4DF for ; Sat, 29 Jul 2006 23:41:38 +0000 (UTC) (envelope-from jb@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id EF01D43D62 for ; Sat, 29 Jul 2006 23:41:37 +0000 (GMT) (envelope-from jb@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id k6TNfbET068836 for ; Sat, 29 Jul 2006 23:41:37 GMT (envelope-from jb@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id k6TNfbFN068833 for perforce@freebsd.org; Sat, 29 Jul 2006 23:41:37 GMT (envelope-from jb@freebsd.org) Date: Sat, 29 Jul 2006 23:41:37 GMT Message-Id: <200607292341.k6TNfbFN068833@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to jb@freebsd.org using -f From: John Birrell To: Perforce Change Reviews Cc: Subject: PERFORCE change 102745 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 29 Jul 2006 23:41:38 -0000 http://perforce.freebsd.org/chv.cgi?CH=102745 Change 102745 by jb@jb_freebsd2 on 2006/07/29 23:41:19 Now that a mutex is used instead of an sx lock, the malloc has to be performed without wait to avoid panicing if it tries to block. Witness points this out. So, loop and retry in low memory situations. Affected files ... .. //depot/projects/dtrace/src/sys/kern/kern_environment.c#5 edit Differences ... ==== //depot/projects/dtrace/src/sys/kern/kern_environment.c#5 (text+ko) ==== @@ -289,17 +289,18 @@ int len; if (dynamic_kenv) { - mtx_lock(&kenv_lock); - cp = _getenv_dynamic(name, NULL); - if (cp != NULL) { - len = strlen(cp) + 1; - ret = malloc(len, M_KENV, M_WAITOK); - strcpy(ret, cp); + do { + mtx_lock(&kenv_lock); + cp = _getenv_dynamic(name, NULL); + if (cp != NULL) { + len = strlen(cp) + 1; + ret = malloc(len, M_KENV, M_NOWAIT); + if (ret != NULL) + strcpy(ret, cp); + } else + ret = NULL; mtx_unlock(&kenv_lock); - } else { - mtx_unlock(&kenv_lock); - ret = NULL; - } + } while (cp != NULL && ret == NULL); } else ret = _getenv_static(name); return (ret);