Fix rounding to UINT32_MAX (#23764)
authorLudovic Henry <luhenry@microsoft.com>
Fri, 5 Apr 2019 21:07:57 +0000 (14:07 -0700)
committerGitHub <noreply@github.com>
Fri, 5 Apr 2019 21:07:57 +0000 (14:07 -0700)
In case you would have UINT32_MAX - 1 CPUs, you would round up to return UINT32_MAX CPUs.

src/gc/unix/cgroup.cpp
src/pal/src/misc/cgroup.cpp

index 10b9b86..f81f14d 100644 (file)
@@ -118,17 +118,10 @@ public:
             *val = 1;
             return true;
         }
-        
-        cpu_count = (double) quota / period;
-        if (cpu_count < UINT32_MAX - 1)
-        {
-            // round up
-            *val = (uint32_t)(cpu_count + 0.999999999);
-        }
-        else
-        {
-            *val = UINT32_MAX;
-        }
+
+        // Calculate cpu count based on quota and round it up
+        cpu_count = (double) quota / period  + 0.999999999;
+        *val = (cpu_count < UINT32_MAX) ? (uint32_t)cpu_count : UINT32_MAX;
 
         return true;
     }
index 97b2cb2..2018df4 100644 (file)
@@ -107,16 +107,9 @@ public:
             return true;
         }
 
-        cpu_count = (double) quota / period;
-        if (cpu_count < UINT_MAX - 1)
-        {
-            // round up
-            *val = (UINT)(cpu_count + 0.999999999);
-        }
-        else
-        {
-            *val = UINT_MAX;
-        }
+        // Calculate cpu count based on quota and round it up
+        cpu_count = (double) quota / period  + 0.999999999;
+        *val = (cpu_count < UINT_MAX) ? (UINT)cpu_count : UINT_MAX;
 
         return true;
     }