diff options
Diffstat (limited to 'src/kernel/cpumgr.C')
-rw-r--r-- | src/kernel/cpumgr.C | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/kernel/cpumgr.C b/src/kernel/cpumgr.C index eb1ad3ac2..33290ebf1 100644 --- a/src/kernel/cpumgr.C +++ b/src/kernel/cpumgr.C @@ -212,12 +212,14 @@ void CpuManager::executePeriodics(cpu_t * i_cpu) { // set up barrier based on # cpus cv_barrier; // TODO whatif other cpus become active? - isync(); - cv_barrier.init(cv_cpuCount); + isync(); // Ensure all instructions complete before this point, so + // we don't get a stale shutdown_requested. if(!cv_shutdown_requested) { + cv_barrier.init(cv_cpuCount); + lwsync(); // Ensure barrier init is globally visible before + // setting defrag = true. cv_defrag = true; - lwsync(); } } } |