Please review this change to the cgroup v1 subsystem which makes it more 
resilient on some of the stranger systems. Unfortunately, I wasn't able to 
re-create a similar system as the reporter. The idea of using the longest 
substring match for the cgroupv1 file paths was based on the fact that on 
systemd systems processes run in separate scopes and the maven forked test 
runner might exhibit this property. For that it makes sense to use the common 
ancestor path. Nothing changes in the common cases where the `cgroup_path` 
matches `_root` and when the `_root` is `/` (container the former, host system 
the latter).

In addition, the code paths which are susceptible to throw NPE have been 
hardened to catch those situations. Should it happen in the future it makes 
more sense (to me) to not have accurate container detection in favor of 
continuing to keep running.

Finally, with the added unit-tests a bug was uncovered on the "substring" match 
case of cgroup paths in hotspot. `p` returned from `strstr` can never point to 
`_root` as it's used as the "needle" to find in "haystack" `cgroup_path` (not 
the other way round).

Testing:
- [x] Added unit tests
- [x] GHA
- [x] Container tests on cgroups v1 Linux. Continue to pass

-------------

Commit messages:
 - 8286212: Cgroup v1 initialization causes NPE on some systems

Changes: https://git.openjdk.java.net/jdk/pull/8629/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=8629&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8286212
  Stats: 267 lines in 7 files changed: 256 ins; 0 del; 11 mod
  Patch: https://git.openjdk.java.net/jdk/pull/8629.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/8629/head:pull/8629

PR: https://git.openjdk.java.net/jdk/pull/8629

Reply via email to