-
Bug
-
Resolution: Fixed
-
P2
-
15, 16
-
b28
-
generic
-
generic
The weak-LRB code is currently subject to a race. Consider this sequence of events between a Java thread and GC threads:
During conc-weak-root-in-progress:
- Java: Load referent out of Reference, it is unreachable but not-yet-cleared
- GC: Clears referent
- GC: Concurrently turn off conc-weak-root-in-progress
- Java: Checks conc-weak-root-in-progress, sees that it's false, continues to use/evac it -> successfully resurrected unreachable object. This must not happen.
AFAICT, this also affects conc-class-unloading and weak-roots.
During conc-weak-root-in-progress:
- Java: Load referent out of Reference, it is unreachable but not-yet-cleared
- GC: Clears referent
- GC: Concurrently turn off conc-weak-root-in-progress
- Java: Checks conc-weak-root-in-progress, sees that it's false, continues to use/evac it -> successfully resurrected unreachable object. This must not happen.
AFAICT, this also affects conc-class-unloading and weak-roots.
- relates to
-
JDK-8254315 Shenandoah: Concurrent weak reference processing
- Resolved