RFR: 8220175: serviceability/dcmd/framework/VMVersionTest.java fails with a timeout
Daniil Titov
daniil.x.titov at oracle.com
Thu Jun 20 04:02:40 UTC 2019
Please review the change that fixes an intermittent failure of serviceability/dcmd/framework/* tests on Linux platform.
The problem here is that get_namespace_pid() method, that is called by mmap_attach_shared () that in turn is called by PerfMemory::attach(),
tries to read the namespace pid information from /proc/<pid>/status file. However, it doesn't check that the error indicator associated with
stream is set that results in the endless loop (lines 664-677) if the process terminates after /proc/<pid>/status was opened (line 659)
and checked for null (line 661).
658 snprintf(fname, sizeof(fname), "/proc/%d/status", vmid);
659 FILE *fp = fopen(fname, "r");
660
661 if (fp) {
662 int pid, nspid;
663 int ret;
664 while (!feof(fp)) {
665 ret = fscanf(fp, "NSpid: %d %d", &pid, &nspid);
666 if (ret == 1) {
667 break;
668 }
669 if (ret == 2) {
670 retpid = nspid;
671 break;
672 }
673 for (;;) {
674 int ch = fgetc(fp);
675 if (ch == EOF || ch == (int)'\n') break;
676 }
677 }
678 fclose(fp);
679 }
The fix adds the check for the error indicator to ensure that the "while" loop terminates properly if the file no longer exists.
Issues [3] and [4] have the same cause and will be closed as duplicates of this issue.
Testing: Mach5 hotspot_serviceability tests succeeded, tier1,tier2, and tier3 tests are in progress.
[1] Webrev: http://cr.openjdk.java.net/~dtitov/8220175/webrev.01/
[2] Bug: https://bugs.openjdk.java.net/browse/JDK-8220175
[3] https://bugs.openjdk.java.net/browse/JDK-8223600
[4] https://bugs.openjdk.java.net/browse/JDK-8217351
Thanks!
-Daniil
More information about the serviceability-dev
mailing list