RFR: 8220175: serviceability/dcmd/framework/VMVersionTest.java fails with a timeout
serguei.spitsyn at oracle.com
serguei.spitsyn at oracle.com
Thu Jun 20 19:13:12 UTC 2019
Hi Daniil,
It looks good to me.
Thanks,
Serguei
On 6/19/19 21:02, Daniil Titov wrote:
> 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