# HG changeset patch # User rriggs # Date 1441977915 14400 # Node ID 85ab1d542026840804f52974a8ea8438f8ca3216 # Parent a65de09f671fe31f8f270ef907996f6250e94e64 8133552: java/lang/ProcessHandle/InfoTest.java fails intermittently - incorrect user 8133809: Remove java/lang/ProcessHandle/InfoTest.java from the Problem List Reviewed-by: darcy, chegar, simonis diff -r a65de09f671f -r 85ab1d542026 src/java.base/linux/native/libjava/ProcessHandleImpl_linux.c --- a/src/java.base/linux/native/libjava/ProcessHandleImpl_linux.c Fri Sep 11 13:44:30 2015 +0300 +++ b/src/java.base/linux/native/libjava/ProcessHandleImpl_linux.c Fri Sep 11 09:25:15 2015 -0400 @@ -141,17 +141,21 @@ struct stat stat_buf; /* + * Stat /proc/ to get the user id + */ + snprintf(fn, sizeof fn, "/proc/%d", pid); + if (stat(fn, &stat_buf) == 0) { + unix_getUserInfo(env, jinfo, stat_buf.st_uid); + } + + /* * Try to open /proc//cmdline */ - snprintf(fn, sizeof fn, "/proc/%d/cmdline", pid); + strncat(fn, "/cmdline", sizeof fn - strnlen(fn, sizeof fn) - 1); if ((fd = open(fn, O_RDONLY)) < 0) { return; } - if (fstat(fd, &stat_buf) == 0) { - unix_getUserInfo(env, jinfo, stat_buf.st_uid); - } - do { // Block to break out of on errors int i, truncated = 0; int count; diff -r a65de09f671f -r 85ab1d542026 test/ProblemList.txt --- a/test/ProblemList.txt Fri Sep 11 13:44:30 2015 +0300 +++ b/test/ProblemList.txt Fri Sep 11 09:25:15 2015 -0400 @@ -133,9 +133,6 @@ # 8029891 java/lang/ClassLoader/deadlock/GetResource.java generic-all -# 8133552 -java/lang/ProcessHandle/InfoTest.java generic-all - ############################################################################ # jdk_instrument diff -r a65de09f671f -r 85ab1d542026 test/java/lang/ProcessHandle/InfoTest.java --- a/test/java/lang/ProcessHandle/InfoTest.java Fri Sep 11 13:44:30 2015 +0300 +++ b/test/java/lang/ProcessHandle/InfoTest.java Fri Sep 11 09:25:15 2015 -0400 @@ -257,10 +257,15 @@ } } } - p1.waitFor(Utils.adjustTimeout(5), TimeUnit.SECONDS); + p1.sendAction("exit"); + Assert.assertTrue(p1.waitFor(Utils.adjustTimeout(30L), TimeUnit.SECONDS), + "timeout waiting for process to terminate"); } catch (IOException | InterruptedException ie) { ie.printStackTrace(System.out); Assert.fail("unexpected exception", ie); + } finally { + // Destroy any children that still exist + ProcessUtil.destroyProcessTree(ProcessHandle.current()); } } @@ -270,8 +275,9 @@ @Test public static void test3() { try { - for (int sleepTime : Arrays.asList(1, 2)) { + for (long sleepTime : Arrays.asList(Utils.adjustTimeout(30), Utils.adjustTimeout(32))) { Process p = spawn("sleep", String.valueOf(sleepTime)); + ProcessHandle.Info info = p.info(); System.out.printf(" info: %s%n", info); @@ -297,7 +303,9 @@ Assert.assertEquals(args[0], String.valueOf(sleepTime)); } } - Assert.assertTrue(p.waitFor(15, TimeUnit.SECONDS)); + p.destroy(); + Assert.assertTrue(p.waitFor(Utils.adjustTimeout(30), TimeUnit.SECONDS), + "timeout waiting for process to terminate"); } } catch (IOException | InterruptedException ex) { ex.printStackTrace(System.out);