You are viewing a plain text version of this content. The canonical link for it is here.
Posted to batik-dev@xmlgraphics.apache.org by "Fabien Leroy (Jira)" <ji...@apache.org> on 2019/10/18 08:42:00 UTC

[jira] [Created] (BATIK-1271) Thread-safety issue in AWTGlyphGeometryCache causing infinite loop

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: batik-dev-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: batik-dev-help@xmlgraphics.apache.org