Fabien Leroy created BATIK-1271:
-----------------------------------
Summary: 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
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.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]