[
https://issues.apache.org/jira/browse/BATIK-802?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
simon steiner updated BATIK-802:
--------------------------------
Summary: [PATCH] Race condition in CleanerThread.java getReferenceQueue()
method (was: Race condition in CleanerThread.java getReferenceQueue() method)
> [PATCH] Race condition in CleanerThread.java getReferenceQueue() method
> -----------------------------------------------------------------------
>
> Key: BATIK-802
> URL: https://issues.apache.org/jira/browse/BATIK-802
> Project: Batik
> Issue Type: Bug
> Components: Utilities
> Affects Versions: 1.8
> Environment: Operating System: All
> Platform: All
> Reporter: Archie Cobbs
> Attachments: BATIK_802__fixed__test_added.patch
>
>
> In org.apache.batik.util.CleanerThread we see:
> public static ReferenceQueue getReferenceQueue() {
> if ( queue == null ) {
> synchronized (CleanerThread.class) {
> queue = new ReferenceQueue();
> thread = new CleanerThread();
> }
> }
> return queue;
> }
> This method is not thread safe due to a race condition. The test for "if
> (queue
> == null)" needs to be inside the synchronized block, not outside of it. As
> written, it's possible for the initialization code to be executed more than
> once.
> Fix: make the entire method synchronized, or add an additional test for "if
> (queue == null)" within the synchronized block (but see
> http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html for why
> the variable needs to remain volatile).
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]