From 9465482d783c49f3952fc6880dc27ebf138c3740 Mon Sep 17 00:00:00 2001 From: Hyungju Lee Date: Fri, 8 Dec 2023 07:55:46 +0900 Subject: [PATCH 1/3] Move a lock to protect m_pDynamicStaticsInfo --- src/coreclr/vm/ceeload.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/coreclr/vm/ceeload.cpp b/src/coreclr/vm/ceeload.cpp index cbabf92302b798..c3c16807b3e408 100644 --- a/src/coreclr/vm/ceeload.cpp +++ b/src/coreclr/vm/ceeload.cpp @@ -1552,10 +1552,10 @@ DWORD Module::AllocateDynamicEntry(MethodTable *pMT) DWORD newId = InterlockedExchangeAdd((LONG*)&m_cDynamicEntries, 1); - if (newId >= VolatileLoad(&m_maxDynamicEntries)) - { - CrstHolder ch(&m_Crst); + CrstHolder ch(&m_Crst); + if (newId >= m_maxDynamicEntries) + { if (newId >= m_maxDynamicEntries) { SIZE_T maxDynamicEntries = max(16, m_maxDynamicEntries); @@ -1571,7 +1571,7 @@ DWORD Module::AllocateDynamicEntry(MethodTable *pMT) memcpy(pNewDynamicStaticsInfo, m_pDynamicStaticsInfo, sizeof(DynamicStaticsInfo) * m_maxDynamicEntries); m_pDynamicStaticsInfo = pNewDynamicStaticsInfo; - VolatileStore(&m_maxDynamicEntries, maxDynamicEntries); + m_maxDynamicEntries = maxDynamicEntries; } } From 7e8cbe614a502bc47e057f03676036790fe2343c Mon Sep 17 00:00:00 2001 From: Hyungju Lee Date: Fri, 8 Dec 2023 11:18:11 +0900 Subject: [PATCH 2/3] apply feedback --- src/coreclr/vm/ceeload.cpp | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/src/coreclr/vm/ceeload.cpp b/src/coreclr/vm/ceeload.cpp index c3c16807b3e408..c86ba4692ab33c 100644 --- a/src/coreclr/vm/ceeload.cpp +++ b/src/coreclr/vm/ceeload.cpp @@ -1550,29 +1550,25 @@ DWORD Module::AllocateDynamicEntry(MethodTable *pMT) } CONTRACTL_END; - DWORD newId = InterlockedExchangeAdd((LONG*)&m_cDynamicEntries, 1); - CrstHolder ch(&m_Crst); + DWORD newId = m_cDynamicEntries++; if (newId >= m_maxDynamicEntries) { - if (newId >= m_maxDynamicEntries) + SIZE_T maxDynamicEntries = max(16, m_maxDynamicEntries); + while (maxDynamicEntries <= newId) { - SIZE_T maxDynamicEntries = max(16, m_maxDynamicEntries); - while (maxDynamicEntries <= newId) - { - maxDynamicEntries *= 2; - } + maxDynamicEntries *= 2; + } - DynamicStaticsInfo* pNewDynamicStaticsInfo = (DynamicStaticsInfo*) - (void*)GetLoaderAllocator()->GetHighFrequencyHeap()->AllocMem(S_SIZE_T(sizeof(DynamicStaticsInfo)) * S_SIZE_T(maxDynamicEntries)); + DynamicStaticsInfo* pNewDynamicStaticsInfo = (DynamicStaticsInfo*) + (void*)GetLoaderAllocator()->GetHighFrequencyHeap()->AllocMem(S_SIZE_T(sizeof(DynamicStaticsInfo)) * S_SIZE_T(maxDynamicEntries)); - if (m_pDynamicStaticsInfo) - memcpy(pNewDynamicStaticsInfo, m_pDynamicStaticsInfo, sizeof(DynamicStaticsInfo) * m_maxDynamicEntries); + if (m_pDynamicStaticsInfo) + memcpy(pNewDynamicStaticsInfo, m_pDynamicStaticsInfo, sizeof(DynamicStaticsInfo) * m_maxDynamicEntries); - m_pDynamicStaticsInfo = pNewDynamicStaticsInfo; - m_maxDynamicEntries = maxDynamicEntries; - } + m_pDynamicStaticsInfo = pNewDynamicStaticsInfo; + m_maxDynamicEntries = maxDynamicEntries; } m_pDynamicStaticsInfo[newId].pEnclosingMT = pMT; From 2c43f41744d770d7016636a92aa86108116ca5a7 Mon Sep 17 00:00:00 2001 From: Hyungju Lee Date: Fri, 8 Dec 2023 12:21:01 +0900 Subject: [PATCH 3/3] cast to LONG --- src/coreclr/vm/ceeload.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coreclr/vm/ceeload.cpp b/src/coreclr/vm/ceeload.cpp index c86ba4692ab33c..8a3f189c4614c2 100644 --- a/src/coreclr/vm/ceeload.cpp +++ b/src/coreclr/vm/ceeload.cpp @@ -1551,7 +1551,7 @@ DWORD Module::AllocateDynamicEntry(MethodTable *pMT) CONTRACTL_END; CrstHolder ch(&m_Crst); - DWORD newId = m_cDynamicEntries++; + DWORD newId = (LONG)m_cDynamicEntries++; if (newId >= m_maxDynamicEntries) {