}
PriorCompletedWorkRequests = totalNumCompletions;
- PriorCompletedWorkRequestsTime = currentTicks;
NextCompletedWorkRequestsTime = currentTicks + ThreadAdjustmentInterval;
- CurrentSampleStartTime = endTime;
- MemoryBarrier();
+ MemoryBarrier(); // flush previous writes (especially NextCompletedWorkRequestsTime)
+ PriorCompletedWorkRequestsTime = currentTicks;
+ CurrentSampleStartTime = endTime;;
}
}
if (CLRThreadpoolHosted())
return false;
- MemoryBarrier();
- DWORD priorTime = PriorCompletedWorkRequestsTime;
- DWORD requiredInterval = NextCompletedWorkRequestsTime - priorTime; // fences above read
+ DWORD priorTime = PriorCompletedWorkRequestsTime;
+ MemoryBarrier(); // read fresh value for NextCompletedWorkRequestsTime below
+ DWORD requiredInterval = NextCompletedWorkRequestsTime - priorTime;
DWORD elapsedInterval = GetTickCount() - priorTime;
if (elapsedInterval >= requiredInterval)
{