United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
JDK-6417055 : JCK15a: DefaultHSBFileChooserPanel hangs on creating HSB image

Details
Type:
Bug
Submit Date:
2006-04-24
Status:
Closed
Updated Date:
2012-03-23
Project Name:
JDK
Resolved Date:
2008-07-18
Component:
client-libs
OS:
linux
Sub-Component:
javax.swing
CPU:
x86
Priority:
P3
Resolution:
Duplicate
Affected Versions:
1.5a,5.0
Fixed Versions:

Related Reports
Duplicate:

Sub Tasks

Description
Filed By       : JCK team (###@###.###)
JCK            : JCK1.5a
J2SE           : 1.5 (build 1.5.0_04-b05, mixed mode, sharing)
Platform[s]    : Linux
JCK test owners: http://javaweb.sfbay/jcce/tcks/jck/docs/others/owners.jto
switch/Mode    : FAILED with -Xshare:on  on x86 machine with Hyper-Threading support
                 PASSED with -Xshare:on  on x86 machine WITHOUT Hyper-Threading support

Failing Tests  :
==================
api/javax_swing/JColorChooser/index.html#getsetTests


JCK test source location:
==========================
/java/re/jck/1.5a/latest/binaries/JCK-runtime-15a/tests


Problem description:
=====================
The following JCK1.5a tests:
  api/javax_swing/JColorChooser/index.html#getsetTests
hangs when running in a loop.

The problem can be reproduced with running it in a loop. Below is the exact command line:

while `true` ; \
  do $JDK_HOME/bin/java -Xverify:all -Xshare:on \
  -cp $JCK_HOME/JCK-runtime-15a/classes -Djava.security.policy=$JCK_HOME/JCK-runtime-15a/lib/jck.policy \
  javasoft.sqe.tests.api.javax.swing.JColorChooser.getsetTests -TestCaseID ALL; \
done


It is known that the loop eventually hangs on Linux machine with Hyper-Threading processors
when java is run with -Xshare:on option. The loop does not hang on Linux machines without
Hyper-Threading processors.

Additional info:
=================
uname -a:
Linux 2.6.13-15-smp #1 SMP Tue Sep 13 14:56:15 UTC 2005 i686 i686 i386 GNU/Linux)


Test output:
=============
Full thread dump Java HotSpot(TM) Client VM (1.5.0_04-b05 mixed mode, sharing):

"SyntheticImageGenerator" daemon prio=1 tid=0x45c143c8 nid=0x369 in Object.wait() [0x46555000..0x465551c0]
       at java.lang.Object.wait(Native Method)
       at java.lang.Object.wait(Object.java:474)
       at javax.swing.colorchooser.DefaultHSBChooserPanel$HSBImage.computeRow(DefaultHSBChooserPanel.java:703)
       - locked <0x659b1060> (a javax.swing.colorchooser.DefaultHSBChooserPanel$HSBImage)
       at javax.swing.colorchooser.SyntheticImageGenerator.run(SyntheticImage.java:124)

"AWT-XAWT" daemon prio=1 tid=0x0835b328 nid=0x349 runnable [0x463d2000..0x463d21c0]
       at sun.awt.X11.XToolkit.waitForEvents(Native Method)
       at sun.awt.X11.XToolkit.run(XToolkit.java:463)
       at sun.awt.X11.XToolkit.run(XToolkit.java:438)
       at java.lang.Thread.run(Thread.java:595)

"Java2D Disposer" daemon prio=1 tid=0x082da490 nid=0x348 in Object.wait() [0x4633f000..0x4633fe40]
       at java.lang.Object.wait(Native Method)
       - waiting on <0x65e4bc00> (a java.lang.ref.ReferenceQueue$Lock)
       at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
       - locked <0x65e4bc00> (a java.lang.ref.ReferenceQueue$Lock)
       at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132)
       at sun.java2d.Disposer.run(Disposer.java:107)
       at java.lang.Thread.run(Thread.java:595)

"Low Memory Detector" daemon prio=1 tid=0x45c00ab0 nid=0x346 runnable [0x00000000..0x00000000]

"CompilerThread0" daemon prio=1 tid=0x080a13d0 nid=0x345 waiting on condition [0x00000000..0x45d7f9a8]

"Signal Dispatcher" daemon prio=1 tid=0x080a0408 nid=0x344 runnable [0x00000000..0x00000000]

"Finalizer" daemon prio=1 tid=0x0809a0c0 nid=0x343 in Object.wait() [0x45b2b000..0x45b2c0c0]
       at java.lang.Object.wait(Native Method)
       - waiting on <0x65e245d8> (a java.lang.ref.ReferenceQueue$Lock)
       at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
       - locked <0x65e245d8> (a java.lang.ref.ReferenceQueue$Lock)
       at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132)
       at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)

"Reference Handler" daemon prio=1 tid=0x08098240 nid=0x342 in Object.wait() [0x45aab000..0x45aab140]
       at java.lang.Object.wait(Native Method)
       - waiting on <0x65e24378> (a java.lang.ref.Reference$Lock)
       at java.lang.Object.wait(Object.java:474)
       at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
       - locked <0x65e24378> (a java.lang.ref.Reference$Lock)

"main" prio=1 tid=0x0805bba8 nid=0x340 in Object.wait() [0xbfc91000..0xbfc91f18]
       at java.lang.Object.wait(Native Method)
       - waiting on <0x65e60660> (a java.awt.MediaTracker)
       at java.awt.MediaTracker.waitForID(MediaTracker.java:651)
       - locked <0x65e60660> (a java.awt.MediaTracker)
       at javax.swing.ImageIcon.loadImage(ImageIcon.java:234)
       - locked <0x65e60660> (a java.awt.MediaTracker)
       at javax.swing.ImageIcon.<init>(ImageIcon.java:165)
       at javax.swing.colorchooser.DefaultHSBChooserPanel.initializePalettesIfNecessary(DefaultHSBChooserPanel.java:463)
       at javax.swing.colorchooser.DefaultHSBChooserPanel.buildSliderPalettePanel(DefaultHSBChooserPanel.java:433)
       at javax.swing.colorchooser.DefaultHSBChooserPanel.buildChooser(DefaultHSBChooserPanel.java:257)
       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:279)
       at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:333)
       at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:270)
       at java.awt.Component.firePropertyChange(Component.java:7159)
       at javax.swing.JColorChooser.setChooserPanels(JColorChooser.java:454)
       at javax.swing.JColorChooser.addChooserPanel(JColorChooser.java:394)
       at javasoft.sqe.tests.api.javax.swing.JColorChooser.getsetTests.JColorChooser0011(getsetTests.java:289)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:585)
       at javasoft.sqe.javatest.lib.MultiTest.invokeTestCase(MultiTest.java:399)
       at javasoft.sqe.javatest.lib.MultiTest.run(MultiTest.java:195)
       at javasoft.sqe.javatest.lib.MultiTest.run(MultiTest.java:127)
       at javasoft.sqe.tests.api.javax.swing.JColorChooser.getsetTests.main(getsetTests.java:34)

"VM Thread" prio=1 tid=0x08095748 nid=0x341 runnable

"VM Periodic Task Thread" prio=1 tid=0x45c02008 nid=0x347 waiting on condition
=============

                                    

Comments
EVALUATION

Talked to ###@###.###. Since all we really have here is a hanging MediaTracker, makes sense to have 2D look at this first.
                                     
2006-04-24
EVALUATION

According to thread dump from the bug description, the SynteticImageGenerator
thread waits on isDirty flag when  first row of HSBImage is calculated
(DefaultHSBChooserPanel.java, lines 720 - 722).

However, if method addConsumer() (DefaultHSBChooserPanel.java,
lines 646 - 649) is called after the start of image production
(i.e, atert the start of the SynteticImageGenerator thread),
the wait() on line 721 never get notification about isDirty changes.
In this case, the image is not produced and MediaTracker never gets
first image frame.

It looks like this scenario happened when JCK test was ran on smp linux
system with -Xshare:on flag.

To solve this problem, we can call notifyAll() after isDirty
flag changes like it is done in the nextFrame() method of the
HSBImage class.
                                     
2006-05-05
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.
                                     
2008-07-18



Hardware and Software, Engineered to Work Together