[
https://issues.apache.org/jira/browse/BATIK-1271?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Simon Steiner resolved BATIK-1271.
----------------------------------
Fix Version/s: main
Resolution: Fixed
https://github.com/apache/xmlgraphics-batik/commit/ef5b651a9ecead0306b31073b93068d00fc4c848
> [PATCH] Thread-safety issue in AWTGlyphGeometryCache causing infinite loop
> --------------------------------------------------------------------------
>
> Key: BATIK-1271
> URL: https://issues.apache.org/jira/browse/BATIK-1271
> Project: Batik
> Issue Type: Bug
> Components: GVT
> Affects Versions: 1.9
> Reporter: Fabien Leroy
> Assignee: Simon Steiner
> Priority: Major
> Fix For: main
>
> Attachments: AWTGlyphGeometryCache.diff, heap dump.png, partial
> thread dump.txt
>
>
> Hello,
>
> Running Batik in a multi-threaded environment (JAVA EE application server),
> we are sometimes having threads stuck in infinite loop.
> Thread dump shows we are stucked in AWTGlyphGeometryCache.get() method.
> Heap dump shows we have an AWTGlyphGeometryCache$Entry instance that is
> referencing itself as ".next" item, resulting in an infinite loop when trying
> to run through the collection in AWTGlyphGeometryCache.get().
> Looking at the code, we found that the AWTGlyphGeometryCache.rehash() method
> is probably causing the problem : it is working on the 'table' class
> attribute and not on a copy. So if multiple threads enter this method
> concurrently, the following line may result in 'e.next = e' :
> {code:java}
> e.next = table[index];{code}
>
>
> Possible solutions that should work :
> # make the method synchronized
> # work on a local 'tmpTable', and assign it to the class attribute 'table'
> at the end of the method (cf suggested patch)
>
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]