From owner-svn-soc-all@FreeBSD.ORG Mon Jul 2 07:33:25 2012 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from socsvn.FreeBSD.org (unknown [IPv6:2001:4f8:fff6::2f]) by hub.freebsd.org (Postfix) with SMTP id DC1D5106566B for ; Mon, 2 Jul 2012 07:33:22 +0000 (UTC) (envelope-from rudot@FreeBSD.org) Received: by socsvn.FreeBSD.org (sSMTP sendmail emulation); Mon, 02 Jul 2012 07:33:22 +0000 Date: Mon, 02 Jul 2012 07:33:22 +0000 From: rudot@FreeBSD.org To: svn-soc-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Message-Id: <20120702073322.DC1D5106566B@hub.freebsd.org> Cc: Subject: socsvn commit: r238766 - soc2012/rudot/sys/kern X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 02 Jul 2012 07:33:25 -0000 Author: rudot Date: Mon Jul 2 07:33:22 2012 New Revision: 238766 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=238766 Log: fixing of buildworld bug - work in progress Modified: soc2012/rudot/sys/kern/kern_racct.c Modified: soc2012/rudot/sys/kern/kern_racct.c ============================================================================== --- soc2012/rudot/sys/kern/kern_racct.c Mon Jul 2 07:31:25 2012 (r238765) +++ soc2012/rudot/sys/kern/kern_racct.c Mon Jul 2 07:33:22 2012 (r238766) @@ -897,11 +897,13 @@ { struct thread *td; + PROC_LOCK_ASSERT(p, MA_OWNED); FOREACH_THREAD_IN_PROC(p, td) { + if (td->td_critnest > 1) + continue; if ((td->td_flags & TDF_RACCT_PCTCPU) == 0) { thread_lock(td); td->td_flags |= TDF_RACCT_PCTCPU; - switch (td->td_state) { case TDS_RUNQ: sched_rem(td); @@ -932,6 +934,7 @@ { struct thread *td; + PROC_LOCK_ASSERT(p, MA_OWNED); FOREACH_THREAD_IN_PROC(p, td) { if (td->td_flags & TDF_RACCT_PCTCPU) return (1); @@ -945,6 +948,7 @@ { struct thread *td; + PROC_LOCK_ASSERT(p, MA_OWNED); FOREACH_THREAD_IN_PROC(p, td) { thread_lock(td); td->td_flags &= ~TDF_RACCT_PCTCPU; @@ -970,12 +974,19 @@ sx_slock(&allproc_lock); FOREACH_PROC_IN_SYSTEM(p) { - if (p->p_state != PRS_NORMAL) + PROC_LOCK(p); + if (p->p_state == PRS_ZOMBIE) { + pct = racct_getpcpu(p); + racct_set(p, RACCT_PCTCPU, pct); + } + + if (p->p_state != PRS_NORMAL) { + PROC_UNLOCK(p); continue; + } microuptime(&wallclock); timevalsub(&wallclock, &p->p_stats->p_start); - PROC_LOCK(p); PROC_SLOCK(p); FOREACH_THREAD_IN_PROC(p, td) ruxagg(p, td);