summaryrefslogtreecommitdiff
path: root/src/vm
diff options
context:
space:
mode:
authorBen Adams <thundercat@illyriad.co.uk>2016-08-10 00:15:18 +0100
committerBen Adams <thundercat@illyriad.co.uk>2016-08-10 00:15:18 +0100
commit519dcde5a6c4fe999e08219e7edd7c9f90e6c96e (patch)
tree400cac5f7761c22517dba24a2e387d9fbe968c12 /src/vm
parent2e0332af6a6889e350c229dac5293b9e3d9b60a3 (diff)
downloadcoreclr-519dcde5a6c4fe999e08219e7edd7c9f90e6c96e.tar.gz
coreclr-519dcde5a6c4fe999e08219e7edd7c9f90e6c96e.tar.bz2
coreclr-519dcde5a6c4fe999e08219e7edd7c9f90e6c96e.zip
Insert MemoryBarrier revert Comthreadpool
Diffstat (limited to 'src/vm')
-rw-r--r--src/vm/comthreadpool.cpp7
-rw-r--r--src/vm/win32threadpool.cpp4
-rw-r--r--src/vm/win32threadpool.h3
3 files changed, 7 insertions, 7 deletions
diff --git a/src/vm/comthreadpool.cpp b/src/vm/comthreadpool.cpp
index 8231214a20..7f629b508b 100644
--- a/src/vm/comthreadpool.cpp
+++ b/src/vm/comthreadpool.cpp
@@ -251,7 +251,6 @@ FCIMPL0(FC_BOOL_RET, ThreadPoolNative::NotifyRequestComplete)
pThread->HasCriticalRegion() ||
pThread->HasThreadAffinity();
- // Read fenced call
bool shouldAdjustWorkers = ThreadpoolMgr::ShouldAdjustMaxWorkersActive();
//
@@ -267,15 +266,15 @@ FCIMPL0(FC_BOOL_RET, ThreadPoolNative::NotifyRequestComplete)
{
HELPER_METHOD_FRAME_BEGIN_RET_0();
- if (needReset)
- pThread->InternalReset(FALSE, TRUE, TRUE, FALSE);
-
if (shouldAdjustWorkers)
{
ThreadpoolMgr::AdjustMaxWorkersActive();
tal.Release();
}
+ if (needReset)
+ pThread->InternalReset(FALSE, TRUE, TRUE, FALSE);
+
HELPER_METHOD_FRAME_END();
}
diff --git a/src/vm/win32threadpool.cpp b/src/vm/win32threadpool.cpp
index cc58cead31..2ec7deded4 100644
--- a/src/vm/win32threadpool.cpp
+++ b/src/vm/win32threadpool.cpp
@@ -1262,11 +1262,11 @@ void ThreadpoolMgr::AdjustMaxWorkersActive()
}
}
- // Memory fences below writes
- VolatileStore(&PriorCompletedWorkRequests, totalNumCompletions);
+ PriorCompletedWorkRequests = totalNumCompletions;
PriorCompletedWorkRequestsTime = currentTicks;
NextCompletedWorkRequestsTime = currentTicks + ThreadAdjustmentInterval;
CurrentSampleStartTime = endTime;
+ MemoryBarrier();
}
}
diff --git a/src/vm/win32threadpool.h b/src/vm/win32threadpool.h
index 0ca01f8b65..50eb708c39 100644
--- a/src/vm/win32threadpool.h
+++ b/src/vm/win32threadpool.h
@@ -1142,8 +1142,9 @@ public:
if (CLRThreadpoolHosted())
return false;
+ MemoryBarrier();
DWORD priorTime = PriorCompletedWorkRequestsTime;
- DWORD requiredInterval = VolatileLoad(&NextCompletedWorkRequestsTime) - priorTime; // fences above read
+ DWORD requiredInterval = NextCompletedWorkRequestsTime - priorTime; // fences above read
DWORD elapsedInterval = GetTickCount() - priorTime;
if (elapsedInterval >= requiredInterval)
{