8206243: java -XshowSettings fails if memory.limit_in_bytes overflows LONG.max
authorstuefe
Thu, 05 Jul 2018 11:56:19 +0200
changeset 50989 3bc865cc2122
parent 50988 e5e3e2c1b2e5
child 50990 f604d14c8132
8206243: java -XshowSettings fails if memory.limit_in_bytes overflows LONG.max Reviewed-by: dholmes, bobv
src/java.base/linux/classes/jdk/internal/platform/cgroupv1/SubSystem.java
--- a/src/java.base/linux/classes/jdk/internal/platform/cgroupv1/SubSystem.java	Thu Jul 05 13:22:44 2018 +0800
+++ b/src/java.base/linux/classes/jdk/internal/platform/cgroupv1/SubSystem.java	Thu Jul 05 11:56:19 2018 +0200
@@ -27,6 +27,7 @@
 
 import java.io.BufferedReader;
 import java.io.IOException;
+import java.math.BigInteger;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -100,11 +101,20 @@
 
     public static long getLongValue(SubSystem subsystem, String parm) {
         String strval = getStringValue(subsystem, parm);
+        long retval = 0;
 
         if (strval == null) return 0L;
 
-        long retval = Long.parseLong(strval);
-
+        try {
+            retval = Long.parseLong(strval);
+        } catch (NumberFormatException e) {
+            // For some properties (e.g. memory.limit_in_bytes) we may overflow the range of signed long.
+            // In this case, return Long.max
+            BigInteger b = new BigInteger(strval);
+            if (b.compareTo(BigInteger.valueOf(Long.MAX_VALUE)) > 0) {
+                return Long.MAX_VALUE;
+            }
+        }
         return retval;
     }