Fix one missing check for NULL after malloc (#15877)
authorJan Vorlicek <janvorli@microsoft.com>
Tue, 16 Jan 2018 23:05:52 +0000 (00:05 +0100)
committerJan Kotas <jkotas@microsoft.com>
Tue, 16 Jan 2018 23:05:52 +0000 (15:05 -0800)
When making the last change to the numa.cpp, I have made a
mistake and forgotten to check return value of one of the mallocs.
This change fixes that and also changes the code pattern to use
goto for the cleanup purposes instead of the nested ifs.

src/pal/src/numa/numa.cpp

index 7690dc0..17b71ab 100644 (file)
@@ -117,26 +117,37 @@ BOOL
 AllocateLookupArrays()
 {
     g_groupAndIndexToCpu = (short*)malloc(g_groupCount * MaxCpusPerGroup * sizeof(short));
-    if (g_groupAndIndexToCpu != NULL)
+    if (g_groupAndIndexToCpu == NULL)
     {
-        g_cpuToAffinity = (CpuAffinity*)malloc(g_possibleCpuCount * sizeof(CpuAffinity));
-        if (g_cpuToAffinity != NULL)
-        {
-            g_groupToCpuMask = (KAFFINITY*)malloc(g_groupCount * sizeof(KAFFINITY));
-            if (g_groupToCpuMask != NULL)
-            {
-                g_groupToCpuCount = (BYTE*)malloc(g_groupCount * sizeof(BYTE));
-                memset(g_groupAndIndexToCpu, 0xff, g_groupCount * MaxCpusPerGroup * sizeof(short));
-                memset(g_cpuToAffinity, 0xff, g_possibleCpuCount * sizeof(CpuAffinity));
-                memset(g_groupToCpuMask, 0, g_groupCount * sizeof(KAFFINITY));
-                memset(g_groupToCpuCount, 0, g_groupCount * sizeof(BYTE));
+        goto FAILED;
+    }
 
-                return TRUE;
-            }
-        }
+    g_cpuToAffinity = (CpuAffinity*)malloc(g_possibleCpuCount * sizeof(CpuAffinity));
+    if (g_cpuToAffinity == NULL)
+    {
+        goto FAILED;
     }
 
-    // One of the allocations have failed
+    g_groupToCpuMask = (KAFFINITY*)malloc(g_groupCount * sizeof(KAFFINITY));
+    if (g_groupToCpuMask == NULL)
+    {
+        goto FAILED;
+    }
+
+    g_groupToCpuCount = (BYTE*)malloc(g_groupCount * sizeof(BYTE));
+    if (g_groupToCpuCount == NULL)
+    {
+        goto FAILED;
+    }
+
+    memset(g_groupAndIndexToCpu, 0xff, g_groupCount * MaxCpusPerGroup * sizeof(short));
+    memset(g_cpuToAffinity, 0xff, g_possibleCpuCount * sizeof(CpuAffinity));
+    memset(g_groupToCpuMask, 0, g_groupCount * sizeof(KAFFINITY));
+    memset(g_groupToCpuCount, 0, g_groupCount * sizeof(BYTE));
+
+    return TRUE;
+
+FAILED:
     FreeLookupArrays();
 
     return FALSE;