Can I please get a review for this change which fixes an issue in 
`jdk.internal.jimage.ImageReader`? 

The `ImageReader` maintains a map of `nodes` which it uses to keep track of 
directories/resources from within the image. When a `findNode` is called, it 
leads to building the `Node` if the node isn't present in the map or if isn't 
complete (i.e. if the directory's immediate child nodes haven't been built). 
During this building of nodes, the code can end up creating a directory node 
and then visiting the child resources to create nodes for those resources. 
While doing so, the code currently doesn't check if a (child) node for the 
resource was already created previously (during a different call) and added to 
the parent directory's `children` list. As a result, it ends up adding the 
child node more than once.

One way to solve this would have been to make the `children` in `Directory` be 
a `Set`. I suspect it's currently a `List` so as to keep track of the order? If 
we did make it a `Set`, we could still keep the order using a `LinkedHashSet`. 
But changing this to a `Set` doesn't look feasible because there's a 
`List<Node> getChildren()` API on `Directory`, which would then have to create 
a copy of the `Set` to return as a `List`.

The commit in this PR instead prevents adding the child more than once by 
checking the `nodes` map for the presence of the child. This new check is added 
only for "resources" and not directories, because `makeDirectory` already skips 
a `Node` creation if the `nodes` has the corresponding entry (line 564 in the 
current PR).
Additionally an `assert` has been added to `addChild` of `Directory`.

A new jtreg test has been added which reproduces the issue without this change 
and verifies the fix.

This part of the code is very new to me, so if there's anything more to be 
considered, then please let me know.

tier1, tier2, tier3 testing is currently in progress.

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

Commit messages:
 - 8288744: Remove tools/jlink/plugins/CompressorPluginTest.java from 
problemlist
 - 8247407: tools/jlink/plugins/CompressorPluginTest.java test failing

Changes: https://git.openjdk.org/jdk19/pull/60/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk19&pr=60&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8247407
  Stats: 93 lines in 3 files changed: 91 ins; 1 del; 1 mod
  Patch: https://git.openjdk.org/jdk19/pull/60.diff
  Fetch: git fetch https://git.openjdk.org/jdk19 pull/60/head:pull/60

PR: https://git.openjdk.org/jdk19/pull/60

Reply via email to