On Thu, 5 Sep 2024 13:20:11 GMT, Matthias Baesken <mbaes...@openjdk.org> wrote:
>> When running jtreg test java/lang/ProcessHandle/PermissionTest.java on >> macOS, a few times this error occurs : >> >> java.lang.RuntimeException: Cannot allocate memory >> at java.base/java.lang.ProcessHandleImpl.getProcessPids0(Native >> Method) >> at >> java.base/java.lang.ProcessHandleImpl.children(ProcessHandleImpl.java:456) >> at >> java.base/java.lang.ProcessHandleImpl.children(ProcessHandleImpl.java:434) >> at PermissionTest.childrenWithPermission(PermissionTest.java:84) >> at >> java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) >> at java.base/java.lang.reflect.Method.invoke(Method.java:573) >> at >> org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:132) >> at org.testng.internal.TestInvoker.invokeMethod(TestInvoker.java:599) >> at >> org.testng.internal.TestInvoker.invokeTestMethod(TestInvoker.java:174) >> at >> org.testng.internal.MethodRunner.runInSequence(MethodRunner.java:46) >> at >> org.testng.internal.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:822) >> at >> org.testng.internal.TestInvoker.invokeTestMethods(TestInvoker.java:147) >> at >> org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146) >> at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:128) >> at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) >> >> >> Probably sysctl fails here, but it is not fully clear; it would help to >> change the exception so that the standard text is shown too in the exception >> message. > > Matthias Baesken has updated the pull request incrementally with one > additional commit since the last revision: > > Repeat sysctl in case of failures; increase the proc info buffer a bit to > hold some more very recent procs src/java.base/macosx/native/libjava/ProcessHandleImpl_macosx.c line 124: > 122: // Read process info for all processes > 123: errsysctl = sysctl(mib, 4, buffer, &bufSize, NULL, 0); > 124: } while (errsysctl < 0 && maxRetries-- > 0); Using a loop is good but I assume only when the second sysctl fails with errno=ENOMEM. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/20839#discussion_r1746012053