Bug: https://bugs.openjdk.java.net/browse/JDK-8229899 Webrev: http://cr.openjdk.java.net/~aeubanks/8229899/webrev.00/
final boolean isInvalid() { if (status == null) { status = (this.path.indexOf('\u0000') < 0) ? PathStatus.CHECKED : PathStatus.INVALID; } return status == PathStatus.INVALID; } If the reads to "status" are reordered and another thread writes to "status", the return value can be wrong. Reading "status" to a local variable fixes the issue.