Date: Mon, 02 Jul 2012 07:33:22 +0000 From: rudot@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r238766 - soc2012/rudot/sys/kern Message-ID: <20120702073322.DC1D5106566B@hub.freebsd.org>
next in thread | raw e-mail | index | archive | help
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);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120702073322.DC1D5106566B>