JDK-6967484 : Freeze/Deadlock in JColorChooser
  • Type: Bug
  • Component: client-libs
  • Sub-Component: javax.swing
  • Affected Version: 6u10
  • Priority: P3
  • Status: Closed
  • Resolution: Duplicate
  • OS: linux
  • CPU: x86
  • Submitted: 2010-07-07
  • Updated: 2011-01-19
  • Resolved: 2010-09-06
Related Reports
Duplicate :  
Description
Java(TM) SE Runtime Environment (build 1.6.0_19-b04)
Java HotSpot(TM) Server VM (build 16.2-b04, mixed mode)

Linux verleihnix 2.6.31.12-0.2-desktop #1 SMP PREEMPT 2010-03-16 21:25:39 +0100 x86_64 x86_64 x86_64 GNU/Linux

4 Core System running openSUSE 11.2 (x86_64)

A DESCRIPTION OF THE PROBLEM :
There is a problem with JColorChooser that can cause the entire application to freeze permanently.

This happens when we open the JColorChooser multiple times and it can also reproduced with the attached code. Sometimes the test code freezes after 30 iterations, sometimes after 250 or 2000 iterations.


Try to set Look&Feel to javax.swing.plaf.metal.MetalLookAndFeel

"SyntheticImageGenerator" daemon prio=10 tid=0xde03dc00 nid=0x315f in Object.wait() [0xddcd4000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0xeecb2fe0> (a javax.swing.colorchooser.DefaultHSBChooserPanel$HSBImage)
	at java.lang.Object.wait(Object.java:485)
	at javax.swing.colorchooser.DefaultHSBChooserPanel$HSBImage.computeRow(DefaultHSBChooserPanel.java:721)
	- locked <0xeecb2fe0> (a javax.swing.colorchooser.DefaultHSBChooserPanel$HSBImage)
	at javax.swing.colorchooser.SyntheticImageGenerator.run(SyntheticImage.java:124)

"pool-2-thread-1" prio=10 tid=0xdd2bcc00 nid=0x3126 waiting on condition [0xdd1ad000]
   java.lang.Thread.State: WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0xf021be20> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1925)
	at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
	at java.lang.Thread.run(Thread.java:619)

"Timer-2" prio=10 tid=0xdd2b7800 nid=0x3125 in Object.wait() [0xdcf5c000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0xe68a44b8> (a java.util.TaskQueue)
	at java.util.TimerThread.mainLoop(Timer.java:509)
	- locked <0xe68a44b8> (a java.util.TaskQueue)
	at java.util.TimerThread.run(Timer.java:462)

"Timer-1" prio=10 tid=0xdd2a3000 nid=0x3124 in Object.wait() [0xdcfad000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0xe68a48b8> (a java.util.TaskQueue)
	at java.util.TimerThread.mainLoop(Timer.java:509)
	- locked <0xe68a48b8> (a java.util.TaskQueue)
	at java.util.TimerThread.run(Timer.java:462)

"pool-1-thread-5" prio=10 tid=0xdceb3400 nid=0x3123 waiting on condition [0xdcffe000]
   java.lang.Thread.State: WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0xe520cc00> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1925)
	at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
	at java.lang.Thread.run(Thread.java:619)

"pool-1-thread-4" prio=10 tid=0xdd284000 nid=0x3122 waiting on condition [0xdca49000]
   java.lang.Thread.State: WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0xe520cc00> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1925)
	at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
	at java.lang.Thread.run(Thread.java:619)

"pool-1-thread-3" prio=10 tid=0xdd278c00 nid=0x3121 waiting on condition [0xdca9a000]
   java.lang.Thread.State: WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0xe520cc00> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1925)
	at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
	at java.lang.Thread.run(Thread.java:619)

"pool-1-thread-2" prio=10 tid=0xdd280000 nid=0x3120 waiting on condition [0xdcaeb000]
   java.lang.Thread.State: WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0xe520cc00> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1925)
	at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
	at java.lang.Thread.run(Thread.java:619)

"pool-1-thread-1" prio=10 tid=0xddef5400 nid=0x311f waiting on condition [0xdcb3c000]
   java.lang.Thread.State: WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0xe520cc00> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1925)
	at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
	at java.lang.Thread.run(Thread.java:619)

"Timer-0" prio=10 tid=0xddee7000 nid=0x311c in Object.wait() [0xdd1fe000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0xe3fa3298> (a java.util.TaskQueue)
	at java.lang.Object.wait(Object.java:485)
	at java.util.TimerThread.mainLoop(Timer.java:483)
	- locked <0xe3fa3298> (a java.util.TaskQueue)
	at java.util.TimerThread.run(Timer.java:462)

"IS-EventWorker" prio=10 tid=0x0874c800 nid=0x311b in Object.wait() [0xdd361000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0xe3fa3820> (a java.lang.Object)
	at java.lang.Object.wait(Object.java:485)
	at com.inubit.ibis.configuration.utils.IBISEventWorkerThread.run(IBISEventWorkerThread.java:572)
	- locked <0xe3fa3820> (a java.lang.Object)

"IS-EventWorkerTimer" prio=10 tid=0x087f3800 nid=0x311a in Object.wait() [0xdd3b2000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0xeeda4bb8> (a java.lang.Object)
	at com.inubit.ibis.configuration.utils.IBISEventWorkerThread$IBISEventWorkerTimerThread.run(IBISEventWorkerThread.java:674)
	- locked <0xeeda4bb8> (a java.lang.Object)

"TimerQueue" daemon prio=10 tid=0x0878a800 nid=0x3119 in Object.wait() [0xdd403000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0xe520a518> (a javax.swing.TimerQueue)
	at javax.swing.TimerQueue.run(TimerQueue.java:232)
	- locked <0xe520a518> (a javax.swing.TimerQueue)
	at java.lang.Thread.run(Thread.java:619)

"AWT-EventQueue-1" prio=10 tid=0xdde95000 nid=0x3118 in Object.wait() [0xdda80000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0xe57ed300> (a java.awt.MediaTracker)
	at java.awt.MediaTracker.waitForID(MediaTracker.java:651)
	- locked <0xe57ed300> (a java.awt.MediaTracker)
	at javax.swing.ImageIcon.loadImage(ImageIcon.java:264)
	- locked <0xe57ed300> (a java.awt.MediaTracker)
	at javax.swing.ImageIcon.<init>(ImageIcon.java:194)
	at javax.swing.colorchooser.DefaultHSBChooserPanel.initializePalettesIfNecessary(DefaultHSBChooserPanel.java:481)
	at javax.swing.colorchooser.DefaultHSBChooserPanel.buildSliderPalettePanel(DefaultHSBChooserPanel.java:451)
	at javax.swing.colorchooser.DefaultHSBChooserPanel.buildChooser(DefaultHSBChooserPanel.java:258)
	at javax.swing.colorchooser.AbstractColorChooserPanel.installChooserPanel(AbstractColorChooserPanel.java:141)
	at javax.swing.colorchooser.DefaultHSBChooserPanel.installChooserPanel(DefaultHSBChooserPanel.java:226)
	at javax.swing.plaf.basic.BasicColorChooserUI$Handler.propertyChange(BasicColorChooserUI.java:285)
	at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:339)
	at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:276)
	at java.awt.Component.firePropertyChange(Component.java:8128)
	at javax.swing.JColorChooser.setChooserPanels(JColorChooser.java:459)
	at javax.swing.plaf.basic.BasicColorChooserUI.installUI(BasicColorChooserUI.java:91)
	at javax.swing.JComponent.setUI(JComponent.java:662)
	at javax.swing.JColorChooser.setUI(JColorChooser.java:222)
	at javax.swing.JColorChooser.updateUI(JColorChooser.java:233)
	at javax.swing.JColorChooser.<init>(JColorChooser.java:196)
	at javax.swing.JColorChooser.<init>(JColorChooser.java:184)
	at com.inubit.ibis.configuration.ui.IBISColorChooser$SwingStandardColorChooserDialog.createColorChooserComponent(IBISColorChooser.java:111)
	at com.inubit.ibis.configuration.ui.IBISColorChooser$AbstractChooseColorDialog.createInputPane(IBISColorChooser.java:66)
	at com.inubit.ibis.configuration.ui.dialog.AbstractDialog.buildDialog(AbstractDialog.java:124)
	at com.inubit.ibis.configuration.ui.IBISColorChooser$AbstractChooseColorDialog.<init>(IBISColorChooser.java:43)
	at com.inubit.ibis.configuration.ui.IBISColorChooser$SwingStandardColorChooserDialog.<init>(IBISColorChooser.java:107)
	at com.inubit.ibis.configuration.ui.IBISColorChooser.showDialog(IBISColorChooser.java:22)
	at com.inubit.ibis.configuration.workflowtool.designer.styleable.StylePanel$ColorComponent.actionPerformed(StylePanel.java:517)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
	at java.awt.Component.processMouseEvent(Component.java:6263)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
	at java.awt.Component.processEvent(Component.java:6028)
	at java.awt.Container.processEvent(Container.java:2041)
	at java.awt.Component.dispatchEventImpl(Component.java:4630)
	at java.awt.Container.dispatchEventImpl(Container.java:2099)
	at java.awt.Component.dispatchEvent(Component.java:4460)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
	at java.awt.Container.dispatchEventImpl(Container.java:2085)
	at java.awt.Window.dispatchEventImpl(Window.java:2478)
	at java.awt.Component.dispatchEvent(Component.java:4460)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
	at com.inubit.ibis.configuration.help.DisplayHelpAction$1.dispatchEvent(DisplayHelpAction.java:149)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:178)
	at java.awt.Dialog$1.run(Dialog.java:1046)
	at java.awt.Dialog$3.run(Dialog.java:1098)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.awt.Dialog.show(Dialog.java:1096)
	at java.awt.Component.show(Component.java:1563)
	at java.awt.Component.setVisible(Component.java:1515)
	at java.awt.Window.setVisible(Window.java:842)
	at java.awt.Dialog.setVisible(Dialog.java:986)
	at com.inubit.ibis.configuration.ui.dialog.AbstractDialog.setVisible(AbstractDialog.java:459)
	at com.inubit.ibis.configuration.workflowtool.actions.GeneralModulePropertiesEditAction.perform(GeneralModulePropertiesEditAction.java:77)
	at com.inubit.ibis.configuration.ui.AbstractToolsetAction.actionPerformed(AbstractToolsetAction.java:74)
	at com.inubit.ibis.configuration.workflowtool.bpd.tools.BPDContextMenuEditTool.handleDoubleClick(BPDContextMenuEditTool.java:560)
	at com.inubit.ibis.configuration.workflowtool.designer.AbstractContextMenuTool$MouseHandler.mousePressed(AbstractContextMenuTool.java:86)
	at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:263)
	at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
	at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
	at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
	at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
	at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
	at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
	at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
	at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
	at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
	at java.awt.Component.processMouseEvent(Component.java:6260)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
	at java.awt.Component.processEvent(Component.java:6028)
	at java.awt.Container.processEvent(Container.java:2041)
	at java.awt.Component.dispatchEventImpl(Component.java:4630)
	at java.awt.Container.dispatchEventImpl(Container.java:2099)
	at java.awt.Component.dispatchEvent(Component.java:4460)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4235)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
	at java.awt.Container.dispatchEventImpl(Container.java:2085)
	at java.awt.Window.dispatchEventImpl(Window.java:2478)
	at java.awt.Component.dispatchEvent(Component.java:4460)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
	at com.inubit.ibis.configuration.help.DisplayHelpAction$1.dispatchEvent(DisplayHelpAction.java:149)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

----
public class TestColorChooser {
    static long counter = 0;

    public static void main(String[] args) throws InvocationTargetException, InterruptedException {
        for (int i = 0; i < 5000000; i++)
            EventQueue.invokeAndWait(new Runnable() {
                public void run() {
                    new JColorChooser();
                    System.out.println("ok! " + (++counter));
                }
            });
    }
}

Comments
EVALUATION The problem is in the SyntheticImage class that is used to draw the color diagram. This class was rewritten in the fix for the 6552812 bug.
06-09-2010

EVALUATION The only suspect is the SyntheticImageGenerator thread class which is used by HSBImage and may cause the deadlock I checked that we don't have this class in JDK 7 any more
30-08-2010