[
https://issues.apache.org/jira/browse/BATIK-1271?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Simon Steiner updated BATIK-1271:
---------------------------------
Summary: [PATCH] Thread-safety issue in AWTGlyphGeometryCache causing
infinite loop (was: Thread-safety issue in AWTGlyphGeometryCache causing
infinite loop)
> [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
> Priority: Major
> 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]