From owner-p4-projects@FreeBSD.ORG Fri Jul 28 11:52:13 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 94F0016A4DE; Fri, 28 Jul 2006 11:52:13 +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 7123B16A4DD for ; Fri, 28 Jul 2006 11:52:13 +0000 (UTC) (envelope-from rdivacky@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 3C5F343D4C for ; Fri, 28 Jul 2006 11:52:13 +0000 (GMT) (envelope-from rdivacky@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 k6SBqD9O021391 for ; Fri, 28 Jul 2006 11:52:13 GMT (envelope-from rdivacky@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id k6SBqC8M021388 for perforce@freebsd.org; Fri, 28 Jul 2006 11:52:12 GMT (envelope-from rdivacky@FreeBSD.org) Date: Fri, 28 Jul 2006 11:52:12 GMT Message-Id: <200607281152.k6SBqC8M021388@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to rdivacky@FreeBSD.org using -f From: Roman Divacky To: Perforce Change Reviews Cc: Subject: PERFORCE change 102643 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: Fri, 28 Jul 2006 11:52:13 -0000 http://perforce.freebsd.org/chv.cgi?CH=102643 Change 102643 by rdivacky@rdivacky_witten on 2006/07/28 11:51:42 Dont leak linux_emuldata_shared on every execve() call. Also remove trailing ; in if(). Affected files ... .. //depot/projects/soc2006/rdivacky_linuxolator/i386/linux/linux_machdep.c#25 edit Differences ... ==== //depot/projects/soc2006/rdivacky_linuxolator/i386/linux/linux_machdep.c#25 (text+ko) ==== @@ -1156,29 +1156,31 @@ em->child_clear_tid = NULL; em->child_set_tid = NULL; - em->shared = NULL; - if (flags & CLONE_VM) { - printf("CLONE_VM!!!!!\n"); - /* lookup the parent */ - p_em = em_find(td->td_proc->p_pptr->p_pid, EMUL_LOCKED); - if (p_em == NULL) { + /* allocate the shared struct only in non-exec cases */ + if (child != 0) { + em->shared = NULL; + if (flags & CLONE_VM) { + /* lookup the parent */ + p_em = em_find(td->td_proc->p_pptr->p_pid, EMUL_LOCKED); + if (p_em == NULL) { #ifdef DEBUG - printf(LMSG("parent emuldata not found for CLONE_VM.\n")); + printf(LMSG("parent emuldata not found for CLONE_VM.\n")); #endif - } else { - em->shared = p_em->shared; - em->shared->refs++; + } else { + em->shared = p_em->shared; + em->shared->refs++; #ifdef DEBUG #endif + } + } else { + struct linux_emuldata_shared *s; + + MALLOC(s, struct linux_emuldata_shared *, sizeof *s, M_LINUX, M_WAITOK | M_ZERO); + em->shared = s; + s->refs = 1; + s->group_pid = td->td_proc->p_pid; } - } else { - struct linux_emuldata_shared *s; - - MALLOC(s, struct linux_emuldata_shared *, sizeof *s, M_LINUX, M_WAITOK | M_ZERO); - em->shared = s; - s->refs = 1; - s->group_pid = td->td_proc->p_pid; } if (child != 0) @@ -1234,7 +1236,7 @@ } em->shared->refs--; - if (em->shared->refs == 0); + if (em->shared->refs == 0) FREE(em->shared, M_LINUX); EMUL_RUNLOCK(&emul_lock);