diff options
-rw-r--r-- | src/vm/win32threadpool.cpp | 6 | ||||
-rw-r--r-- | src/vm/win32threadpool.h | 6 |
2 files changed, 6 insertions, 6 deletions
diff --git a/src/vm/win32threadpool.cpp b/src/vm/win32threadpool.cpp index 2ec7deded4..23ed911611 100644 --- a/src/vm/win32threadpool.cpp +++ b/src/vm/win32threadpool.cpp @@ -1263,10 +1263,10 @@ void ThreadpoolMgr::AdjustMaxWorkersActive() } PriorCompletedWorkRequests = totalNumCompletions; - PriorCompletedWorkRequestsTime = currentTicks; NextCompletedWorkRequestsTime = currentTicks + ThreadAdjustmentInterval; - CurrentSampleStartTime = endTime; - MemoryBarrier(); + MemoryBarrier(); // flush previous writes (especially NextCompletedWorkRequestsTime) + PriorCompletedWorkRequestsTime = currentTicks; + CurrentSampleStartTime = endTime;; } } diff --git a/src/vm/win32threadpool.h b/src/vm/win32threadpool.h index 50eb708c39..45880d0b0f 100644 --- a/src/vm/win32threadpool.h +++ b/src/vm/win32threadpool.h @@ -1142,9 +1142,9 @@ public: 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) { |