RFR: 8247407: tools/jlink/plugins/CompressorPluginTest.java test failing

Alan Bateman alanb at openjdk.org
Fri Jun 24 13:06:51 UTC 2022


On Thu, 23 Jun 2022 12:59:34 GMT, Jaikiran Pai <jpai at openjdk.org> wrote:

> 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.

Good sleuthing!

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

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


More information about the core-libs-dev mailing list