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 "simon steiner (JIRA)" <ji...@apache.org> on 2017/08/14 11:39:00 UTC
[jira] [Assigned] (BATIK-802) Race condition in CleanerThread.java
getReferenceQueue() method
[ https://issues.apache.org/jira/browse/BATIK-802?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
simon steiner reassigned BATIK-802:
-----------------------------------
Assignee: (was: Batik Developer's Mailing list)
> 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: batik-dev-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: batik-dev-help@xmlgraphics.apache.org