From 519dcde5a6c4fe999e08219e7edd7c9f90e6c96e Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Wed, 10 Aug 2016 00:15:18 +0100 Subject: [PATCH] Insert MemoryBarrier revert Comthreadpool --- src/vm/comthreadpool.cpp | 7 +++---- src/vm/win32threadpool.cpp | 4 ++-- src/vm/win32threadpool.h | 3 ++- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/vm/comthreadpool.cpp b/src/vm/comthreadpool.cpp index 8231214..7f629b5 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 cc58cea..2ec7ded 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 0ca01f8..50eb708 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) { -- 2.7.4