[lworld] RFR: 8362252: [lworld] Possible synchronization issue in jdk/internal/jimage/ImageReader.java
David Beaumont
duke at openjdk.org
Thu Dec 18 13:57:08 UTC 2025
On Thu, 18 Dec 2025 13:36:12 GMT, David Beaumont <duke at openjdk.org> wrote:
> Tidying up syncrhonization around shared image.
src/java.base/share/classes/jdk/internal/jimage/ImageReader.java line 408:
> 406: synchronized (OPEN_FILES) {
> 407: ReaderKey key = new ReaderKey(imagePath, previewMode);
> 408: SharedImageReader reader = OPEN_FILES.get(key);
I changed the name of this for clarity. It's a bit confusing to have two "image reader" instances in scope with one called "image" and one called just "reader".
src/java.base/share/classes/jdk/internal/jimage/ImageReader.java line 444:
> 442: nodes.clear();
> 443: }
> 444: super.close();
I will double check if moving this outside the synchronization of OPEN_FILES is an issue.
The underlying BasicImageReader using a file channel, which is close (with locking) in this close() method.
The vague worry I have is that now the outter OPEN_FILES lock isn't held, we can get a race where the same file has a file channel being closed as a new one is being opened, and I'm not 100% sure I know if that's safe.
Moving this back into the OPEN_FILES lock is possible, but leaves this code doing more work with the locks held, which I'm inclined to avoid if possible.
-------------
PR Review Comment: https://git.openjdk.org/valhalla/pull/1828#discussion_r2631177032
PR Review Comment: https://git.openjdk.org/valhalla/pull/1828#discussion_r2631195409
More information about the valhalla-dev
mailing list