summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBen Adams <thundercat@illyriad.co.uk>2016-08-10 01:10:43 +0100
committerBen Adams <thundercat@illyriad.co.uk>2016-08-10 01:10:43 +0100
commita0597dae2368fecea16c21f2d9f255476c330818 (patch)
tree30bdf1332eed81935e8466c48c1cd3e7dbffbe61 /src
parent519dcde5a6c4fe999e08219e7edd7c9f90e6c96e (diff)
downloadcoreclr-a0597dae2368fecea16c21f2d9f255476c330818.tar.gz
coreclr-a0597dae2368fecea16c21f2d9f255476c330818.tar.bz2
coreclr-a0597dae2368fecea16c21f2d9f255476c330818.zip
Fix MemoryBarrier
Diffstat (limited to 'src')
-rw-r--r--src/vm/win32threadpool.cpp6
-rw-r--r--src/vm/win32threadpool.h6
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)
{