Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6533138

Applet with JFileChooser with windows L&F deadlocks on a multiple CPU windows machine

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Duplicate
    • Icon: P2 P2
    • None
    • 5.0u10
    • deploy
    • x86
    • windows_xp

      FULL PRODUCT VERSION :
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_10-b03)
      Java HotSpot(TM) Client VM (build 1.5.0_10-b03, mixed mode, sharing)

      ADDITIONAL OS VERSION INFORMATION :
      Microsoft Windows XP [Version 5.1.2600]

      A DESCRIPTION OF THE PROBLEM :
      When one uses JFileChooser from an applet, leaves the applet page, returns to the applet page, and attempts to use JFileChooser again from the applet, the JPI deadlocks in JFileChooser in Windows Look and Feel code. [Note you must be using the Windows Look and Feel for the issue to occur.]

      This issue can be reproduced in both Internet Explorer and Firefox browsers with Java 5. Unfortunately, it is not reproducible on all Windows systems -- to the best of my knowledge all systems where the issue has been reproduced had 2 or more CPUs. I believe this issue is reproducible always or almost always on machines where it can be reproduced at all.

      We have not managed to reproduce this issue in Java 6 -- and I suspect from examining the threading changes there that this issue is not reproducible there. Unfortunately, we cannot require Java 6 as of yet and must have a resolution for this issue in Java 5. [I would, however, appreciate confirmation that the issue is not possible in Java 6.]

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Use JFileChooser from an applet, leaves the applet page, returns to the applet page, and attempts to use JFileChooser again from the applet. [Note you must be using the Windows Look and Feel for the issue to occur.]


      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      JFileChooser should come up and the deadlock should certainly not occur.
      ACTUAL -
      A deadlock occurs. The following full thread dump clearly shows this:

      Full thread dump Java HotSpot(TM) Client VM (1.5.0_10-b03 mixed mode):

      "Image Fetcher 0" daemon prio=4 tid=0x02b56340 nid=0x1fec in
      Object.wait() [0x07d0f000..0x07d0fa68]
              at java.lang.Object.wait(Native Method)
              - waiting on <0x16920130> (a java.util.Vector)
              at sun.awt.image.ImageFetcher.nextImage(Unknown Source)
              - locked <0x16920130> (a java.util.Vector)
              at sun.awt.image.ImageFetcher.fetchloop(Unknown Source)
              at sun.awt.image.ImageFetcher.run(Unknown Source)

      "AWT-EventQueue-3" prio=4 tid=0x075ba088 nid=0xe80 waiting for monitor
      entry [0x06dce000..0x06dcfae8]
              at
      sun.awt.windows.WDesktopProperties.addPropertyChangeListener(Unknown
      Source)
              - waiting to lock <0x165b2810> (a
      sun.awt.windows.WDesktopProperties)
              at sun.awt.windows.WToolkit.addPropertyChangeListener(Unknown
      Source)
              - locked <0x165433a8> (a sun.awt.windows.WToolkit)
              at
      com.sun.java.swing.plaf.windows.DesktopProperty.getValueFromDesktop(Unkn
      own Source)
              at
      com.sun.java.swing.plaf.windows.DesktopProperty.createValue(Unknown
      Source)
              at javax.swing.UIDefaults.getFromHashtable(Unknown Source)
              at javax.swing.UIDefaults.get(Unknown Source)
              at javax.swing.MultiUIDefaults.get(Unknown Source)
              at javax.swing.UIDefaults.getColor(Unknown Source)
              at javax.swing.UIManager.getColor(Unknown Source)
              at javax.swing.LookAndFeel.installColors(Unknown Source)
              at javax.swing.LookAndFeel.installColorsAndFont(Unknown Source)
              at
      javax.swing.plaf.basic.BasicPopupMenuUI.installDefaults(Unknown Source)
              at javax.swing.plaf.basic.BasicPopupMenuUI.installUI(Unknown
      Source)
              at javax.swing.JComponent.setUI(Unknown Source)
              at javax.swing.JPopupMenu.setUI(Unknown Source)
              at javax.swing.JPopupMenu.updateUI(Unknown Source)
              at javax.swing.JPopupMenu.<init>(Unknown Source)
              at javax.swing.JPopupMenu.<init>(Unknown Source)
              at javax.swing.plaf.basic.BasicComboPopup.<init>(Unknown Source)
              at javax.swing.plaf.basic.BasicComboBoxUI.createPopup(Unknown
      Source)
              at
      com.sun.java.swing.plaf.windows.WindowsComboBoxUI.createPopup(Unknown
      Source)
              at javax.swing.plaf.basic.BasicComboBoxUI.installUI(Unknown
      Source)
              at
      com.sun.java.swing.plaf.windows.WindowsComboBoxUI.installUI(Unknown
      Source)
              at javax.swing.JComponent.setUI(Unknown Source)
              at javax.swing.JComboBox.setUI(Unknown Source)
              at javax.swing.JComboBox.updateUI(Unknown Source)
              at javax.swing.JComboBox.init(Unknown Source)
              at javax.swing.JComboBox.<init>(Unknown Source)
              at
      com.sun.java.swing.plaf.windows.WindowsFileChooserUI$2.<init>(Unknown
      Source)
              at
      com.sun.java.swing.plaf.windows.WindowsFileChooserUI.installComponents(U
      nknown Source)
              at javax.swing.plaf.basic.BasicFileChooserUI.installUI(Unknown
      Source)
              at
      com.sun.java.swing.plaf.windows.WindowsFileChooserUI.installUI(Unknown
      Source)
              at javax.swing.JComponent.setUI(Unknown Source)
              at javax.swing.JFileChooser.updateUI(Unknown Source)
              at javax.swing.JFileChooser.setup(Unknown Source)
              at wt.security.WTJFileChooser.setup0(WTJFileChooser.java:138)
              at wt.security.WTJFileChooser$1.run(WTJFileChooser.java:130)
              at java.security.AccessController.doPrivileged(Native Method)
              at wt.security.WTJFileChooser.setup(WTJFileChooser.java:127)
              at javax.swing.JFileChooser.<init>(Unknown Source)
              at wt.security.WTJFileChooser.<init>(WTJFileChooser.java:48)
              at wt.security.WTJFileChooser.<init>(WTJFileChooser.java:32)
              at applet.test.TestApplet$1.actionPerformed(TestApplet.java:32)
              at javax.swing.AbstractButton.fireActionPerformed(Unknown
      Source)
              at javax.swing.AbstractButton$Handler.actionPerformed(Unknown
      Source)
              at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown
      Source)
              at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
              at
      javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
              at java.awt.Component.processMouseEvent(Unknown Source)
              at javax.swing.JComponent.processMouseEvent(Unknown Source)
              at java.awt.Component.processEvent(Unknown Source)
              at java.awt.Container.processEvent(Unknown Source)
              at java.awt.Component.dispatchEventImpl(Unknown Source)
              at java.awt.Container.dispatchEventImpl(Unknown Source)
              at java.awt.Component.dispatchEvent(Unknown Source)
              at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown
      Source)
              at java.awt.LightweightDispatcher.processMouseEvent(Unknown
      Source)
              at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
              at java.awt.Container.dispatchEventImpl(Unknown Source)
              at java.awt.Component.dispatchEvent(Unknown Source)
              at java.awt.EventQueue.dispatchEvent(Unknown Source)
              at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown
      Source)
              at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown
      Source)
              at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
              at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
              at java.awt.EventDispatchThread.run(Unknown Source)

      "TimerQueue" daemon prio=4 tid=0x07636848 nid=0x1f1c in Object.wait()
      [0x07a0f000..0x07a0fb68]
              at java.lang.Object.wait(Native Method)
              - waiting on <0x168a00b0> (a javax.swing.TimerQueue)
              at javax.swing.TimerQueue.run(Unknown Source)
              - locked <0x168a00b0> (a javax.swing.TimerQueue)
              at java.lang.Thread.run(Unknown Source)

      "thread applet-applet/test/TestApplet.class" prio=4 tid=0x06a87b10
      nid=0x1d58 in Object.wait() [0x07c0f000..0x07c0fc68]
              at java.lang.Object.wait(Native Method)
              - waiting on <0x168a00d0> (a sun.plugin.AppletViewer)
              at java.lang.Object.wait(Unknown Source)
              at sun.applet.AppletPanel.getNextEvent(Unknown Source)
              - locked <0x168a00d0> (a sun.plugin.AppletViewer)
              at sun.applet.AppletPanel.run(Unknown Source)
              at java.lang.Thread.run(Unknown Source)

      "AWT-EventQueue-0" prio=6 tid=0x076a6938 nid=0xd2c waiting for monitor
      entry [0x0750f000..0x0750fa68]
              at sun.awt.windows.WToolkit.clearDesktopProperty(Unknown Source)
              - waiting to lock <0x165433a8> (a sun.awt.windows.WToolkit)
              at
      sun.awt.windows.WDesktopProperties.diffPropertyChanges(Unknown Source)
              - locked <0x165b2810> (a sun.awt.windows.WDesktopProperties)
              at sun.awt.windows.WDesktopProperties.access$100(Unknown Source)
              at
      sun.awt.windows.WDesktopProperties$DiffPropertyChanges.run(Unknown
      Source)
              at java.awt.event.InvocationEvent.dispatch(Unknown Source)
              at java.awt.EventQueue.dispatchEvent(Unknown Source)
              at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown
      Source)
              at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown
      Source)
              at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
              at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
              at java.awt.EventDispatchThread.run(Unknown Source)

      "AWT-Shutdown" prio=6 tid=0x06a50148 nid=0x1274 in Object.wait()
      [0x0740f000..0x0740fae8]
              at java.lang.Object.wait(Native Method)
              - waiting on <0x165433e8> (a java.lang.Object)
              at java.lang.Object.wait(Unknown Source)
              at sun.awt.AWTAutoShutdown.run(Unknown Source)
              - locked <0x165433e8> (a java.lang.Object)
              at java.lang.Thread.run(Unknown Source)

      "Thread-8" prio=6 tid=0x06a6f038 nid=0x384 runnable
      [0x00000000..0x0013e708]

      "traceMsgQueueThread" daemon prio=6 tid=0x02c2bf68 nid=0x1c48 in
      Object.wait() [0x0720f000..0x0720fb68]
              at java.lang.Object.wait(Native Method)
              - waiting on <0x165840f0> (a java.util.ArrayList)
              at java.lang.Object.wait(Unknown Source)
              at com.sun.deploy.util.Trace$TraceMsgQueueChecker.run(Unknown
      Source)
              - locked <0x165840f0> (a java.util.ArrayList)
              at java.lang.Thread.run(Unknown Source)

      "AWT-Windows" daemon prio=6 tid=0x06a507b8 nid=0x121c runnable
      [0x06ecf000..0x06ecfbe8]
              at sun.awt.windows.WToolkit.eventLoop(Native Method)
              at sun.awt.windows.WToolkit.run(Unknown Source)
              at java.lang.Thread.run(Unknown Source)

      "Java2D Disposer" daemon prio=10 tid=0x06a499d0 nid=0x1974 in
      Object.wait() [0x06ccf000..0x06ccfce8]
              at java.lang.Object.wait(Native Method)
              - waiting on <0x16543410> (a java.lang.ref.ReferenceQueue$Lock)
              at java.lang.ref.ReferenceQueue.remove(Unknown Source)
              - locked <0x16543410> (a java.lang.ref.ReferenceQueue$Lock)
              at java.lang.ref.ReferenceQueue.remove(Unknown Source)
              at sun.java2d.Disposer.run(Unknown Source)
              at java.lang.Thread.run(Unknown Source)

      "Low Memory Detector" daemon prio=6 tid=0x02c36b60 nid=0x7d0 runnable
      [0x00000000..0x00000000]

      "CompilerThread0" daemon prio=10 tid=0x02c35470 nid=0x1a84 waiting on
      condition [0x00000000..0x067cf748]

      "Signal Dispatcher" daemon prio=10 tid=0x02c34668 nid=0x9ec waiting on
      condition [0x00000000..0x00000000]

      "JDWP Event Helper Thread" daemon prio=6 tid=0x02c332b0 nid=0x974
      runnable [0x00000000..0x00000000]

      "JDWP Transport Listener: dt_socket" daemon prio=6 tid=0x02b53008
      nid=0xccc runnable [0x00000000..0x00000000]

      "Finalizer" daemon prio=8 tid=0x02c23020 nid=0x250 in Object.wait()
      [0x063cf000..0x063cfc68]
              at java.lang.Object.wait(Native Method)
              - waiting on <0x165434f8> (a java.lang.ref.ReferenceQueue$Lock)
              at java.lang.ref.ReferenceQueue.remove(Unknown Source)
              - locked <0x165434f8> (a java.lang.ref.ReferenceQueue$Lock)
              at java.lang.ref.ReferenceQueue.remove(Unknown Source)
              at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)

      "Reference Handler" daemon prio=10 tid=0x02c21bb0 nid=0xfc8 in
      Object.wait() [0x062cf000..0x062cfce8]
              at java.lang.Object.wait(Native Method)
              - waiting on <0x165433e0> (a java.lang.ref.Reference$Lock)
              at java.lang.Object.wait(Unknown Source)
              at java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)
              - locked <0x165433e0> (a java.lang.ref.Reference$Lock)

      "VM Thread" prio=10 tid=0x0035ecb0 nid=0x1770 runnable

      "VM Periodic Task Thread" prio=10 tid=0x0035e820 nid=0x1488 waiting on
      condition


      Found one Java-level deadlock:
      =============================
      "AWT-EventQueue-3":
        waiting to lock monitor 0x02c228d4 (object 0x165b2810, a
      sun.awt.windows.WDesktopProperties),
        which is held by "AWT-EventQueue-0"
      "AWT-EventQueue-0":
        waiting to lock monitor 0x02c228f4 (object 0x165433a8, a
      sun.awt.windows.WToolkit),
        which is held by "AWT-EventQueue-3"

      Java stack information for the threads listed above:
      ===================================================
      "AWT-EventQueue-3":
              at
      sun.awt.windows.WDesktopProperties.addPropertyChangeListener(Unknown
      Source)
              - waiting to lock <0x165b2810> (a
      sun.awt.windows.WDesktopProperties)
              at sun.awt.windows.WToolkit.addPropertyChangeListener(Unknown
      Source)
              - locked <0x165433a8> (a sun.awt.windows.WToolkit)
              at
      com.sun.java.swing.plaf.windows.DesktopProperty.getValueFromDesktop(Unkn
      own Source)
              at
      com.sun.java.swing.plaf.windows.DesktopProperty.createValue(Unknown
      Source)
              at javax.swing.UIDefaults.getFromHashtable(Unknown Source)
              at javax.swing.UIDefaults.get(Unknown Source)
              at javax.swing.MultiUIDefaults.get(Unknown Source)
              at javax.swing.UIDefaults.getColor(Unknown Source)
              at javax.swing.UIManager.getColor(Unknown Source)
              at javax.swing.LookAndFeel.installColors(Unknown Source)
              at javax.swing.LookAndFeel.installColorsAndFont(Unknown Source)
              at
      javax.swing.plaf.basic.BasicPopupMenuUI.installDefaults(Unknown Source)
              at javax.swing.plaf.basic.BasicPopupMenuUI.installUI(Unknown
      Source)
              at javax.swing.JComponent.setUI(Unknown Source)
              at javax.swing.JPopupMenu.setUI(Unknown Source)
              at javax.swing.JPopupMenu.updateUI(Unknown Source)
              at javax.swing.JPopupMenu.<init>(Unknown Source)
              at javax.swing.JPopupMenu.<init>(Unknown Source)
              at javax.swing.plaf.basic.BasicComboPopup.<init>(Unknown Source)
              at javax.swing.plaf.basic.BasicComboBoxUI.createPopup(Unknown
      Source)
              at
      com.sun.java.swing.plaf.windows.WindowsComboBoxUI.createPopup(Unknown
      Source)
              at javax.swing.plaf.basic.BasicComboBoxUI.installUI(Unknown
      Source)
              at
      com.sun.java.swing.plaf.windows.WindowsComboBoxUI.installUI(Unknown
      Source)
              at javax.swing.JComponent.setUI(Unknown Source)
              at javax.swing.JComboBox.setUI(Unknown Source)
              at javax.swing.JComboBox.updateUI(Unknown Source)
              at javax.swing.JComboBox.init(Unknown Source)
              at javax.swing.JComboBox.<init>(Unknown Source)
              at
      com.sun.java.swing.plaf.windows.WindowsFileChooserUI$2.<init>(Unknown
      Source)
              at
      com.sun.java.swing.plaf.windows.WindowsFileChooserUI.installComponents(U
      nknown Source)
              at javax.swing.plaf.basic.BasicFileChooserUI.installUI(Unknown
      Source)
              at
      com.sun.java.swing.plaf.windows.WindowsFileChooserUI.installUI(Unknown
      Source)
              at javax.swing.JComponent.setUI(Unknown Source)
              at javax.swing.JFileChooser.updateUI(Unknown Source)
              at javax.swing.JFileChooser.setup(Unknown Source)
              at wt.security.WTJFileChooser.setup0(WTJFileChooser.java:138)
              at wt.security.WTJFileChooser$1.run(WTJFileChooser.java:130)
              at java.security.AccessController.doPrivileged(Native Method)
              at wt.security.WTJFileChooser.setup(WTJFileChooser.java:127)
              at javax.swing.JFileChooser.<init>(Unknown Source)
              at wt.security.WTJFileChooser.<init>(WTJFileChooser.java:48)
              at wt.security.WTJFileChooser.<init>(WTJFileChooser.java:32)
              at applet.test.TestApplet$1.actionPerformed(TestApplet.java:32)
              at javax.swing.AbstractButton.fireActionPerformed(Unknown
      Source)
              at javax.swing.AbstractButton$Handler.actionPerformed(Unknown
      Source)
              at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown
      Source)
              at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
              at
      javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
              at java.awt.Component.processMouseEvent(Unknown Source)
              at javax.swing.JComponent.processMouseEvent(U
      The testcase is in the attached file ptc.tar.
      Just expand it on a webserver or on your local disk and load the test.html into the browser. The classes were generated with the -source 1.5 and -target 1.5 javac options.

            ccheung Calvin Cheung
            ccheung Calvin Cheung
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: