socsvn commit: r238766 - soc2012/rudot/sys/kern
rudot at FreeBSD.org
rudot at FreeBSD.org
Mon Jul 2 07:33:25 UTC 2012
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);
More information about the svn-soc-all
mailing list