Fix few issues discovered by testing
authorJan Vorlicek <janvorli@microsoft.com>
Wed, 10 Apr 2019 13:18:03 +0000 (15:18 +0200)
committerJan Vorlicek <janvorli@microsoft.com>
Wed, 10 Apr 2019 13:18:03 +0000 (15:18 +0200)
src/gc/unix/gcenv.unix.cpp
src/gc/windows/gcenv.windows.cpp
src/pal/src/numa/numa.cpp
src/vm/gcenv.os.cpp

index fbba7d9..65a20d8 100644 (file)
@@ -575,12 +575,11 @@ bool GCToOSInterface::VirtualCommit(void* address, size_t size, uint16_t node)
         {
             int usedNodeMaskBits = g_highestNumaNode + 1;
             int nodeMaskLength = (usedNodeMaskBits + sizeof(unsigned long) - 1) / sizeof(unsigned long);
-            unsigned long *nodeMask = (unsigned long*)alloca(nodeMaskLength * sizeof(unsigned long));
-            memset(nodeMask, 0, nodeMaskLength);
+            unsigned long nodeMask[nodeMaskLength];
+            memset(nodeMask, 0, sizeof(nodeMask));
 
             int index = node / sizeof(unsigned long);
-            int mask = ((unsigned long)1) << (node & (sizeof(unsigned long) - 1));
-            nodeMask[index] = mask;
+            nodeMask[index] = ((unsigned long)1) << (node & (sizeof(unsigned long) - 1));
 
             int st = mbind(address, size, MPOL_PREFERRED, nodeMask, usedNodeMaskBits, 0);
             assert(st == 0);
index d2bcde8..5f6a0ff 100644 (file)
@@ -1298,7 +1298,7 @@ bool GCToOSInterface::GetProcessorForHeap(uint16_t heap_number, uint16_t* proc_n
     bool success = false;
 
     // Locate heap_number-th available processor
-    uint16_t procNumber;
+    uint16_t procIndex;
     size_t cnt = heap_number;
     for (uint16_t i = 0; i < GCToOSInterface::GetTotalProcessorCount(); i++)
     {
@@ -1306,7 +1306,7 @@ bool GCToOSInterface::GetProcessorForHeap(uint16_t heap_number, uint16_t* proc_n
         {
             if (cnt == 0)
             {
-                procNumber = i;
+                procIndex = i;
                 success = true;
                 break;
             }
@@ -1321,12 +1321,12 @@ bool GCToOSInterface::GetProcessorForHeap(uint16_t heap_number, uint16_t* proc_n
 
         if (CanEnableGCCPUGroups())
         {
-            GetGroupForProcessor(procNumber, &gn, &gpn);
+            GetGroupForProcessor(procIndex, &gn, &gpn);
         }
         else
         {
             gn = GroupProcNo::NoGroup;
-            gpn = procNumber;
+            gpn = procIndex;
         }
 
         GroupProcNo groupProcNo(gn, gpn);
@@ -1343,14 +1343,13 @@ bool GCToOSInterface::GetProcessorForHeap(uint16_t heap_number, uint16_t* proc_n
             else
             {
                 // Get the current processor group
-                PROCESSOR_NUMBER procNumber;
                 GetCurrentProcessorNumberEx(&procNumber);
             }
 
             procNumber.Number   = (BYTE)gpn;
             procNumber.Reserved = 0;
 
-            if (GetNumaProcessorNodeEx(&procNumber, node_no))
+            if (!GetNumaProcessorNodeEx(&procNumber, node_no))
             {
                 *node_no = NUMA_NODE_UNDEFINED;
             }
index 4a07068..4fb2bdb 100644 (file)
@@ -206,12 +206,11 @@ VirtualAllocExNuma(
             {
                 int usedNodeMaskBits = g_highestNumaNode + 1;
                 int nodeMaskLength = (usedNodeMaskBits + sizeof(unsigned long) - 1) / sizeof(unsigned long);
-                unsigned long *nodeMask = (unsigned long*)alloca(nodeMaskLength * sizeof(unsigned long));
-                memset(nodeMask, 0, nodeMaskLength);
+                unsigned long nodeMask[nodeMaskLength];
+                memset(nodeMask, 0, sizeof(nodeMask));
 
                 int index = nndPreferred / sizeof(unsigned long);
-                int mask = ((unsigned long)1) << (nndPreferred & (sizeof(unsigned long) - 1));
-                nodeMask[index] = mask;
+                nodeMask[index] = ((unsigned long)1) << (nndPreferred & (sizeof(unsigned long) - 1));
 
                 int st = mbind(result, dwSize, MPOL_PREFERRED, nodeMask, usedNodeMaskBits, 0);
 
index 2334d95..e20c36e 100644 (file)
@@ -951,7 +951,7 @@ bool GCToOSInterface::GetProcessorForHeap(uint16_t heap_number, uint16_t* proc_n
     bool success = false;
 
     // Locate heap_number-th available processor
-    uint16_t procNumber;
+    uint16_t procIndex;
     size_t cnt = heap_number;
     for (uint16_t i = 0; i < GCToOSInterface::GetTotalProcessorCount(); i++)
     {
@@ -959,7 +959,7 @@ bool GCToOSInterface::GetProcessorForHeap(uint16_t heap_number, uint16_t* proc_n
         {
             if (cnt == 0)
             {
-                procNumber = i;
+                procIndex = i;
                 success = true;
                 break;
             }
@@ -975,12 +975,12 @@ bool GCToOSInterface::GetProcessorForHeap(uint16_t heap_number, uint16_t* proc_n
 
         if (CPUGroupInfo::CanEnableGCCPUGroups())
         {
-            CPUGroupInfo::GetGroupForProcessor(procNumber, &gn, &gpn);
+            CPUGroupInfo::GetGroupForProcessor(procIndex, &gn, &gpn);
         }
         else
         {
             gn = GroupProcNo::NoGroup;
-            gpn = procNumber;
+            gpn = procIndex;
         }
 
         GroupProcNo groupProcNo(gn, gpn);
@@ -997,14 +997,13 @@ bool GCToOSInterface::GetProcessorForHeap(uint16_t heap_number, uint16_t* proc_n
             else
             {
                 // Get the current processor group
-                PROCESSOR_NUMBER procNumber;
                 GetCurrentProcessorNumberEx(&procNumber);
             }
 
             procNumber.Number   = (BYTE)gpn;
             procNumber.Reserved = 0;
 
-            if (NumaNodeInfo::GetNumaProcessorNodeEx(&procNumber, node_no))
+            if (!NumaNodeInfo::GetNumaProcessorNodeEx(&procNumber, node_no))
             {
                 *node_no = NUMA_NODE_UNDEFINED;
             }
@@ -1014,8 +1013,8 @@ bool GCToOSInterface::GetProcessorForHeap(uint16_t heap_number, uint16_t* proc_n
             *node_no = groupProcNo.GetGroup();
         }
 #else // !FEATURE_PAL
-        *proc_no = procNumber;
-        if (!GCToOSInterface::CanEnableGCNumaAware() || !NumaNodeInfo::GetNumaProcessorNodeEx(procNumber, (WORD*)node_no))
+        *proc_no = procIndex;
+        if (!GCToOSInterface::CanEnableGCNumaAware() || !NumaNodeInfo::GetNumaProcessorNodeEx(procIndex, (WORD*)node_no))
         {
             *node_no = NUMA_NODE_UNDEFINED;
         }