JDK-4822422 : deadlock on image loading for html document
  • Type: Bug
  • Component: client-libs
  • Sub-Component: javax.swing
  • Affected Version: 1.4.2
  • Priority: P2
  • Status: Closed
  • Resolution: Fixed
  • OS: windows_xp
  • CPU: x86
  • Submitted: 2003-02-22
  • Updated: 2003-04-07
  • Resolved: 2003-03-18
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
Other
1.4.2 b19Fixed
Related Reports
Relates :  
Description
###@###.### 2003-02-21

J2SE Version (please include all output from java -version flag):
  java version "1.4.2-beta"
  Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2-beta-b16)
  Java HotSpot(TM) Client VM (build 1.4.2-beta-b16, mixed mode)

Does this problem occur on J2SE 1.3 or 1.4?  Yes / No (pick one)
  1.4.1 = No
  1.3.1 = yes

Operating System Configuration Information (be specific):
  Windows XP

Bug Description:
  A complex demo HTML page is not well displayed and not able to 
  close the application by clicking on the frame, i.e. the application
  does not answer anymore.

Steps to Reproduce (be specific):
  Compile and run HtmlMantis.java with the right proxy setup:

  java -Dhttp.proxyHost=wcscaa.SFBay.Sun.COM -Dhttp.proxyPort=8080 HtmlMantis

  See the differences between 1.4.1 and build 16.

Comments
CONVERTED DATA BugTraq+ Release Management Values COMMIT TO FIX: mantis-beta tiger FIXED IN: mantis-beta tiger INTEGRATED IN: mantis-b19 mantis-beta tiger tiger-b06 VERIFIED IN: mantis-beta
14-06-2004

EVALUATION ava.lang.Object.wait(Native Method) - waiting on <0x44a79ba0> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111) - locked <0x44a79ba0> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:127) at sun.java2d.Disposer.run(Disposer.java:97) at java.lang.Thread.run(Thread.java:534) "AWT-EventQueue-0" prio=1 tid=0x0x8190630 nid=0x10aa in Object.wait() [be1fe000..be1ff850] at java.lang.Object.wait(Native Method) - waiting on <0x44aa2208> (a javax.swing.text.html.HTMLDocument) at java.lang.Object.wait(Object.java:429) at javax.swing.text.AbstractDocument.readLock(AbstractDocument.java:1385) - locked <0x44aa2208> (a javax.swing.text.html.HTMLDocument) at javax.swing.plaf.basic.BasicTextUI.getPreferredSize(BasicTextUI.java:797) at javax.swing.JComponent.getPreferredSize(JComponent.java:1275) at javax.swing.JEditorPane.getPreferredSize(JEditorPane.java:1214) at javax.swing.text.JTextComponent.getPreferredScrollableViewportSize(JTextComponent.java:1650) at javax.swing.ViewportLayout.preferredLayoutSize(ViewportLayout.java:72) at java.awt.Container.preferredSize(Container.java:1178) - locked <0x449ba440> (a java.awt.Component$AWTTreeLock) at java.awt.Container.getPreferredSize(Container.java:1162) at javax.swing.JComponent.getPreferredSize(JComponent.java:1277) at javax.swing.ScrollPaneLayout.preferredLayoutSize(ScrollPaneLayout.java:475) at java.awt.Container.preferredSize(Container.java:1178) - locked <0x449ba440> (a java.awt.Component$AWTTreeLock) at java.awt.Container.getPreferredSize(Container.java:1162) at javax.swing.JComponent.getPreferredSize(JComponent.java:1277) at javax.swing.text.ComponentView$Invalidator.cacheChildSizes(ComponentView.java:401) at javax.swing.text.ComponentView$Invalidator.doLayout(ComponentView.java:383) at java.awt.Container.validateTree(Container.java:1092) at java.awt.Container.validate(Container.java:1067) - locked <0x449ba440> (a java.awt.Component$AWTTreeLock) at javax.swing.text.ComponentView$Invalidator.validateIfNecessary(ComponentView.java:394) at javax.swing.text.ComponentView$Invalidator.getPreferredSize(ComponentView.java:427) at javax.swing.text.ComponentView.getPreferredSpan(ComponentView.java:119) at javax.swing.text.BoxView.calculateMinorAxisRequirements(BoxView.java:882) at javax.swing.text.BoxView.checkRequests(BoxView.java:913) at javax.swing.text.BoxView.getMinimumSpan(BoxView.java:542) at javax.swing.text.BoxView.calculateMinorAxisRequirements(BoxView.java:881) at javax.swing.text.html.BlockView.calculateMinorAxisRequirements(BlockView.java:129) at javax.swing.text.BoxView.checkRequests(BoxView.java:913) at javax.swing.text.BoxView.getMinimumSpan(BoxView.java:542) at javax.swing.text.html.BlockView.getMinimumSpan(BlockView.java:360) at javax.swing.text.BoxView.calculateMinorAxisRequirements(BoxView.java:881) at javax.swing.text.html.BlockView.calculateMinorAxisRequirements(BlockView.java:129) at javax.swing.text.BoxView.checkRequests(BoxView.java:913) at javax.swing.text.BoxView.setSpanOnAxis(BoxView.java:325) at javax.swing.text.BoxView.layout(BoxView.java:682) at javax.swing.text.BoxView.setSize(BoxView.java:379) at javax.swing.plaf.basic.BasicTextUI$RootView.setSize(BasicTextUI.java:1601) at javax.swing.plaf.basic.BasicTextUI$RootView.paint(BasicTextUI.java:1320) at javax.swing.plaf.basic.BasicTextUI.paintSafely(BasicTextUI.java:636) at javax.swing.plaf.basic.BasicTextUI.paint(BasicTextUI.java:770) at javax.swing.plaf.basic.BasicTextUI.update(BasicTextUI.java:749) at javax.swing.JComponent.paintComponent(JComponent.java:541) at javax.swing.JComponent.paint(JComponent.java:808) at javax.swing.JComponent.paintChildren(JComponent.java:647) - locked <0x449ba440> (a java.awt.Component$AWTTreeLock) at javax.swing.JComponent.paint(JComponent.java:817) at javax.swing.JViewport.paint(JViewport.java:722) at javax.swing.JComponent.paintChildren(JComponent.java:647) - locked <0x449ba440> (a java.awt.Component$AWTTreeLock) at javax.swing.JComponent.paint(JComponent.java:817) at javax.swing.JComponent.paintChildren(JComponent.java:647) - locked <0x449ba440> (a java.awt.Component$AWTTreeLock) at javax.swing.JComponent.paint(JComponent.java:817) at javax.swing.JComponent.paintChildren(JComponent.java:647) - locked <0x449ba440> (a java.awt.Component$AWTTreeLock) at javax.swing.JComponent.paint(JComponent.java:817) at javax.swing.JLayeredPane.paint(JLayeredPane.java:555) at javax.swing.JComponent.paintChildren(JComponent.java:647) - locked <0x449ba440> (a java.awt.Component$AWTTreeLock) at javax.swing.JComponent.paintWithOffscreenBuffer(JComponent.java:4806) at javax.swing.JComponent.paintDoubleBuffered(JComponent.java:4752) at javax.swing.JComponent.paint(JComponent.java:798) at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:21) at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:60) at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:97) at java.awt.Container.paint(Container.java:1312) at javax.swing.JFrame.update(JFrame.java:385) at sun.awt.RepaintArea.paint(RepaintArea.java:169) at sun.awt.motif.MComponentPeer.handleEvent(MComponentPeer.java:402) at java.awt.Component.dispatchEventImpl(Component.java:3678) at java.awt.Container.dispatchEventImpl(Container.java:1627) at java.awt.Window.dispatchEventImpl(Window.java:1600) at java.awt.Component.dispatchEvent(Component.java:3477) at java.awt.EventQueue.dispatchEvent(EventQueue.java:451) at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137) at java.awt.EventDispatchThread.run(EventDispatchThread.java:100) "Keep-Alive-Timer" daemon prio=1 tid=0x0x818d730 nid=0x10a9 waiting on condition [be3ff000..be3ff850] at java.lang.Thread.sleep(Native Method) at sun.net.www.http.KeepAliveCache.run(KeepAliveCache.java:149) at java.lang.Thread.run(Thread.java:534) "AWT-Motif" daemon prio=1 tid=0x0x8145688 nid=0x10a6 runnable [be7ff000..be7ff850] at sun.awt.motif.MToolkit.run(Native Method) at java.lang.Thread.run(Thread.java:534) "AWT-Shutdown" prio=1 tid=0x0x8145380 nid=0x10a5 in Object.wait() [be9ff000..be9ff850] at java.lang.Object.wait(Native Method) - waiting on <0x449c5c68> (a java.lang.Object) at java.lang.Object.wait(Object.java:429) at sun.awt.AWTAutoShutdown.run(AWTAutoShutdown.java:259) - locked <0x449c5c68> (a java.lang.Object) at java.lang.Thread.run(Thread.java:534) "Signal Dispatcher" daemon prio=1 tid=0x0x808c6d0 nid=0x10a3 waiting on condition [0..0] "Finalizer" daemon prio=1 tid=0x0x80868b8 nid=0x10a0 in Object.wait() [bf3ff000..bf3ff850] at java.lang.Object.wait(Native Method) - waiting on <0x449b9870> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111) - locked <0x449b9870> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:127) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159) "Reference Handler" daemon prio=1 tid=0x0x8085d08 nid=0x109f in Object.wait() [bf5ff000..bf5ff850] at java.lang.Object.wait(Native Method) - waiting on <0x449b98d8> (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Object.java:429) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:113) - locked <0x449b98d8> (a java.lang.ref.Reference$Lock) "VM Thread" prio=1 tid=0x0x8082ab8 nid=0x109e runnable "VM Periodic Task Thread" prio=1 tid=0x0x808b318 nid=0x10a1 waiting on condition "Suspend Checker Thread" prio=1 tid=0x0x808bc80 nid=0x10a2 runnable <kid@debian: ~/work/tests/4822422 :> > -------------- Thread-1 has write lock on the document and waits for image to be loaded. "Image Fetcher 0" is trying to load the image but wants to get read lock on the document to update the width and height in the ImageView.ImageHandler.imageUpdate We have classic deadlock case. One way to solve that might be -- *** ImageView.java 2003/02/28 15:03:01 1.1 --- ImageView.java 2003/03/03 20:11:35 *************** *** 869,880 **** */ private void safePreferenceChanged() { if (SwingUtilities.isEventDispatchThread()) { preferenceChanged(null, true, true); } else { SwingUtilities.invokeLater(new Runnable() { public void run() { ! preferenceChanged(null, true, true); } }); } --- 869,887 ---- */ private void safePreferenceChanged() { if (SwingUtilities.isEventDispatchThread()) { + Document doc = getDocument(); + if (doc instanceof AbstractDocument) { + ((AbstractDocument)doc).readLock(); + } preferenceChanged(null, true, true); + if (doc instanceof AbstractDocument) { + ((AbstractDocument)doc).readUnlock(); + } } else { SwingUtilities.invokeLater(new Runnable() { public void run() { ! safePreferenceChanged(); } }); } *************** *** 968,984 **** } if (changed != 0) { // May need to resize myself, asynchronously: ! Document doc = getDocument(); ! try { ! if (doc instanceof AbstractDocument) { ! ((AbstractDocument)doc).readLock(); ! } ! safePreferenceChanged(); ! } finally { ! if (doc instanceof AbstractDocument) { ! ((AbstractDocument)doc).readUnlock(); ! } ! } return true; } --- 975,982 ---- } if (changed != 0) { // May need to resize myself, asynchronously: ! ! safePreferenceChanged(); return true; } -- ====================================================================== Name: ik75403 Date: 03/28/2003 Previously this bug was rare. In 1.4.2 it is more easily reproducible because of the fix for 4765331 EditorPane editing: Ctrl-A + Delete on wrapped HTML throws BadLocationException Part 1. This is what needed to make bug 4822422 to occur: If the same image is used for background and for <img> tag deadlock might happen. <technical details> It happens because the same ImageFetcher is used for loading the same image. Background image loading initiated by parsing thread. Image for <img> tag loading initiated by view hierarchy building thread. Parsing thread waits until the image is loaded completely holding the write lock for the document. When new portion of the image is available ImageObserver.imageUpdate method is called for ever ImageObserver which is interested in this image. ImageView.ImageHandler.imageUpdate tries to get readlock for the document in some cases. We can not get the readlock when some other thread has the write lock. ImageFetcher for this image holds. At some point we need to get the readlock from event dispatching thread and this thread holds as well. Now we have imageFetcher, parsing thread and event dispatching thread on hold. We should not stop in imageUpdate in any case. In this case this was a typo in ImageView.java I would say. We are getting readlock in imageFetcher thread but accessing the document in event dispatching thread. Instead we should get the lock in the same thread we want to access the document. </techincal details> To fix this we need modify ImageView.java The code change less than 20 lines. The risk is minimal. The code would work the way it was supposed to be working. <technical details> *** ImageView.java 2003/02/28 15:03:01 1.1 --- ImageView.java 2003/03/12 20:38:15 *************** *** 869,880 **** */ private void safePreferenceChanged() { if (SwingUtilities.isEventDispatchThread()) { preferenceChanged(null, true, true); } else { ! SwingUtilities.invokeLater(new Runnable() { public void run() { ! preferenceChanged(null, true, true); } }); } --- 869,887 ---- */ private void safePreferenceChanged() { if (SwingUtilities.isEventDispatchThread()) { + Document doc = getDocument(); + if (doc instanceof AbstractDocument) { + ((AbstractDocument)doc).readLock(); + } preferenceChanged(null, true, true); + if (doc instanceof AbstractDocument) { + ((AbstractDocument)doc).readUnlock(); + } } else { ! SwingUtilities.invokeLater(new Runnable() { public void run() { ! safePreferenceChanged(); } }); } *************** *** 968,984 **** } if (changed != 0) { // May need to resize myself, asynchronously: ! Document doc = getDocument(); ! try { ! if (doc instanceof AbstractDocument) { ! ((AbstractDocument)doc).readLock(); ! } ! safePreferenceChanged(); ! } finally { ! if (doc instanceof AbstractDocument) { ! ((AbstractDocument)doc).readUnlock(); ! } ! } return true; } --- 975,982 ---- } if (changed != 0) { // May need to resize myself, asynchronously: ! ! safePreferenceChanged(); return true; } </technical details> ======================================================================
11-06-2004

EVALUATION Name: ik75403 Date: 03/03/2003 That is a deadlock bug. It is not a regression really. It was not working correctly ever. Here goes threads dump: -------------- <kid@debian: ~/work/tests/4822422 :> >./run.sh /usr/java/j2sdk1.5 /ws/tiger executing /usr/java/j2sdk1.5/bin/java -Xbootclasspath/p:/ws/tiger/classes -Dhttp.proxyHost=proxy.sparc.spb.su -Dhttp.proxyPort=3128 HtmlMantis java version "Build:13-Feb-03@22:37.tiger" Java(TM) 2 Runtime Environment, Standard Edition (build Build:13-Feb-03@22:37.tiger) Java HotSpot(TM) Client VM (build 1.4.1-b21, mixed mode) Full thread dump Java HotSpot(TM) Client VM (1.4.1-b21 mixed mode): "Image Fetcher 0" daemon prio=1 tid=0x0x82749b8 nid=0xf67 in Object.wait() [be5ff000..be5ff850] at java.lang.Object.wait(Native Method) - waiting on <0x44aa5be0> (a javax.swing.text.html.HTMLDocument) at java.lang.Object.wait(Object.java:429) at javax.swing.text.AbstractDocument.readLock(AbstractDocument.java:1385) - locked <0x44aa5be0> (a javax.swing.text.html.HTMLDocument) at javax.swing.text.html.ImageView$ImageHandler.imageUpdate(ImageView.java:974) at sun.awt.image.ImageWatched.newInfo(ImageWatched.java:55) at sun.awt.image.ImageRepresentation.setDimensions(ImageRepresentation.java:123) at sun.awt.image.ImageDecoder.setDimensions(ImageDecoder.java:62) at sun.awt.image.PNGImageDecoder.produceImage(PNGImageDecoder.java:310) at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:254) at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:168) at sun.awt.image.ImageFetcher.run(ImageFetcher.java:136) "Thread-1" prio=1 tid=0x0x8266240 nid=0xf65 in Object.wait() [bddfe000..bddff850] at java.lang.Object.wait(Native Method) - waiting on <0x44bc5438> (a java.awt.MediaTracker) at java.awt.MediaTracker.waitForID(MediaTracker.java:631) - locked <0x44bc5438> (a java.awt.MediaTracker) at javax.swing.ImageIcon.loadImage(ImageIcon.java:234) - locked <0x44bc5438> (a java.awt.MediaTracker) at javax.swing.ImageIcon.<init>(ImageIcon.java:125) at javax.swing.ImageIcon.<init>(ImageIcon.java:138) at javax.swing.text.html.CSS$BackgroundImage.getImage(CSS.java:2477) - locked <0x44bfbb18> (a javax.swing.text.html.CSS$BackgroundImage) at javax.swing.text.html.StyleSheet.getBackgroundImage(StyleSheet.java:944) at javax.swing.text.html.StyleSheet$BoxPainter.<init>(StyleSheet.java:1738) at javax.swing.text.html.StyleSheet.getBoxPainter(StyleSheet.java:880) at javax.swing.text.html.BlockView.setPropertiesFromAttributes(BlockView.java:389) at javax.swing.text.html.BlockView.setParent(BlockView.java:57) at javax.swing.text.CompositeView.replace(CompositeView.java:200) at javax.swing.text.BoxView.replace(BoxView.java:164) at javax.swing.text.html.TableView$RowView.replace(TableView.java:1414) at javax.swing.text.CompositeView.loadChildren(CompositeView.java:97) at javax.swing.text.CompositeView.setParent(CompositeView.java:122) at javax.swing.text.CompositeView.replace(CompositeView.java:200) at javax.swing.text.BoxView.replace(BoxView.java:164) at javax.swing.text.html.TableView.replace(TableView.java:864) at javax.swing.text.View.updateChildren(View.java:1122) at javax.swing.text.View.insertUpdate(View.java:706) at javax.swing.text.html.TableView.insertUpdate(TableView.java:804) at javax.swing.text.View.forwardUpdateToView(View.java:1213) at javax.swing.text.View.forwardUpdate(View.java:1188) at javax.swing.text.BoxView.forwardUpdate(BoxView.java:222) at javax.swing.text.View.insertUpdate(View.java:712) at javax.swing.text.View.forwardUpdateToView(View.java:1213) at javax.swing.text.View.forwardUpdate(View.java:1188) at javax.swing.text.BoxView.forwardUpdate(BoxView.java:222) at javax.swing.text.View.insertUpdate(View.java:712) at javax.swing.text.View.forwardUpdateToView(View.java:1213) at javax.swing.text.View.forwardUpdate(View.java:1188) at javax.swing.text.BoxView.forwardUpdate(BoxView.java:222) at javax.swing.text.html.TableView.forwardUpdate(TableView.java:845) at javax.swing.text.View.insertUpdate(View.java:712) at javax.swing.text.html.TableView.insertUpdate(TableView.java:804) at javax.swing.text.View.forwardUpdateToView(View.java:1213) at javax.swing.text.View.forwardUpdate(View.java:1188) at javax.swing.text.BoxView.forwardUpdate(BoxView.java:222) at javax.swing.text.View.insertUpdate(View.java:712) at javax.swing.text.View.forwardUpdateToView(View.java:1213) at javax.swing.text.View.forwardUpdate(View.java:1188) at javax.swing.text.BoxView.forwardUpdate(BoxView.java:222) at javax.swing.text.View.insertUpdate(View.java:712) at javax.swing.plaf.basic.BasicTextUI$RootView.insertUpdate(BasicTextUI.java:1489) at javax.swing.plaf.basic.BasicTextUI$UpdateHandler.insertUpdate(BasicTextUI.java:1729) at javax.swing.text.AbstractDocument.fireInsertUpdate(AbstractDocument.java:184) at javax.swing.text.DefaultStyledDocument.insert(DefaultStyledDocument.java:201) at javax.swing.text.html.HTMLDocument.insert(HTMLDocument.java:230) at javax.swing.text.html.HTMLDocument$HTMLReader.flushBuffer(HTMLDocument.java:3215) at javax.swing.text.html.HTMLDocument$HTMLReader.flush(HTMLDocument.java:2055) at javax.swing.text.html.HTMLEditorKit.read(HTMLEditorKit.java:231) at javax.swing.JEditorPane.read(JEditorPane.java:506) at javax.swing.JEditorPane$PageLoader.run(JEditorPane.java:553) "AWT-EventQueue-0" prio=1 tid=0x0x81908f0 nid=0xf63 in Object.wait() [be1fe000..be1ff850] at java.lang.Object.wait(Native Method) - waiting on <0x44aa5be0> (a javax.swing.text.html.HTMLDocument) at java.lang.Object.wait(Object.java:429) at javax.swing.text.AbstractDocument.readLock(AbstractDocument.java:1385) - locked <0x44aa5be0> (a javax.swing.text.html.HTMLDocument) at javax.swing.plaf.basic.BasicTextUI.getMinimumSize(BasicTextUI.java:831) at javax.swing.JEditorPane.getScrollableTracksViewportWidth(JEditorPane.java:1346) at javax.swing.JEditorPane.getPreferredSize(JEditorPane.java:1220) at javax.swing.text.JTextComponent.getPreferredScrollableViewportSize(JTextComponent.java:1650) at javax.swing.ViewportLayout.preferredLayoutSize(ViewportLayout.java:72) at java.awt.Container.preferredSize(Container.java:1178) - locked <0x449ba440> (a java.awt.Component$AWTTreeLock) at java.awt.Container.getPreferredSize(Container.java:1162) at javax.swing.JComponent.getPreferredSize(JComponent.java:1277) at javax.swing.ScrollPaneLayout.preferredLayoutSize(ScrollPaneLayout.java:475) at java.awt.Container.preferredSize(Container.java:1178) - locked <0x449ba440> (a java.awt.Component$AWTTreeLock) at java.awt.Container.getPreferredSize(Container.java:1162) at javax.swing.JComponent.getPreferredSize(JComponent.java:1277) at javax.swing.text.ComponentView$Invalidator.cacheChildSizes(ComponentView.java:401) at javax.swing.text.ComponentView$Invalidator.doLayout(ComponentView.java:383) at java.awt.Container.validateTree(Container.java:1092) at java.awt.Container.validate(Container.java:1067) - locked <0x449ba440> (a java.awt.Component$AWTTreeLock) at javax.swing.text.ComponentView$Invalidator.validateIfNecessary(ComponentView.java:394) at javax.swing.text.ComponentView$Invalidator.getPreferredSize(ComponentView.java:427) at javax.swing.text.ComponentView.getPreferredSpan(ComponentView.java:119) at javax.swing.text.BoxView.calculateMinorAxisRequirements(BoxView.java:882) at javax.swing.text.BoxView.checkRequests(BoxView.java:913) at javax.swing.text.BoxView.getMinimumSpan(BoxView.java:542) at javax.swing.text.BoxView.calculateMinorAxisRequirements(BoxView.java:881) at javax.swing.text.html.BlockView.calculateMinorAxisRequirements(BlockView.java:129) at javax.swing.text.BoxView.checkRequests(BoxView.java:913) at javax.swing.text.BoxView.getMinimumSpan(BoxView.java:542) at javax.swing.text.html.BlockView.getMinimumSpan(BlockView.java:360) at javax.swing.text.BoxView.calculateMinorAxisRequirements(BoxView.java:881) at javax.swing.text.html.BlockView.calculateMinorAxisRequirements(BlockView.java:129) at javax.swing.text.BoxView.checkRequests(BoxView.java:913) at javax.swing.text.BoxView.setSpanOnAxis(BoxView.java:325) at javax.swing.text.BoxView.layout(BoxView.java:682) at javax.swing.text.BoxView.setSize(BoxView.java:379) at javax.swing.plaf.basic.BasicTextUI$RootView.setSize(BasicTextUI.java:1601) at javax.swing.plaf.basic.BasicTextUI.getPreferredSize(BasicTextUI.java:801) at javax.swing.JComponent.getPreferredSize(JComponent.java:1275) at javax.swing.JEditorPane.getPreferredSize(JEditorPane.java:1214) at javax.swing.ScrollPaneLayout.layoutContainer(ScrollPaneLayout.java:769) at java.awt.Container.layout(Container.java:1020) at java.awt.Container.doLayout(Container.java:1010) at java.awt.Container.validateTree(Container.java:1092) at java.awt.Container.validate(Container.java:1067) - locked <0x449ba440> (a java.awt.Component$AWTTreeLock) at javax.swing.RepaintManager.validateInvalidComponents(RepaintManager.java:353) at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:116) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:178) at java.awt.EventQueue.dispatchEvent(EventQueue.java:449) at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137) at java.awt.EventDispatchThread.run(EventDispatchThread.java:100) <kid@debian: ~/work/tests/4822422 :> >./run.sh /usr/java/j2sdk1.5 /ws/tiger executing /usr/java/j2sdk1.5/bin/java -Xbootclasspath/p:/ws/tiger/classes -Dhttp.proxyHost=proxy.sparc.spb.su -Dhttp.proxyPort=3128 HtmlMantis java version "Build:13-Feb-03@22:37.tiger" Java(TM) 2 Runtime Environment, Standard Edition (build Build:13-Feb-03@22:37.tiger) Java HotSpot(TM) Client VM (build 1.4.1-b21, mixed mode) Full thread dump Java HotSpot(TM) Client VM (1.4.1-b21 mixed mode): "Image Fetcher 1" daemon prio=1 tid=0x0x8280590 nid=0x10af in Object.wait() [bd9ff000..bd9ff850] at java.lang.Object.wait(Native Method) - waiting on <0x44aa2208> (a javax.swing.text.html.HTMLDocument) at java.lang.Object.wait(Object.java:429) at javax.swing.text.AbstractDocument.readLock(AbstractDocument.java:1385) - locked <0x44aa2208> (a javax.swing.text.html.HTMLDocument) at javax.swing.text.html.ImageView$ImageHandler.imageUpdate(ImageView.java:974) at sun.awt.image.ImageWatched.newInfo(ImageWatched.java:55) at sun.awt.image.ImageRepresentation.setDimensions(ImageRepresentation.java:123) at sun.awt.image.ImageDecoder.setDimensions(ImageDecoder.java:62) at sun.awt.image.PNGImageDecoder.produceImage(PNGImageDecoder.java:310) at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:254) at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:168) at sun.awt.image.ImageFetcher.run(ImageFetcher.java:136) "Thread-1" prio=1 tid=0x0x82660d8 nid=0x10ac in Object.wait() [bddfe000..bddff850] at java.lang.Object.wait(Native Method) - waiting on <0x44b84918> (a java.awt.MediaTracker) at java.awt.MediaTracker.waitForID(MediaTracker.java:631) - locked <0x44b84918> (a java.awt.MediaTracker) at javax.swing.ImageIcon.loadImage(ImageIcon.java:234) - locked <0x44b84918> (a java.awt.MediaTracker) at javax.swing.ImageIcon.<init>(ImageIcon.java:125) at javax.swing.ImageIcon.<init>(ImageIcon.java:138) at javax.swing.text.html.CSS$BackgroundImage.getImage(CSS.java:2477) - locked <0x44bd0cc8> (a javax.swing.text.html.CSS$BackgroundImage) at javax.swing.text.html.StyleSheet.getBackgroundImage(StyleSheet.java:944) at javax.swing.text.html.StyleSheet$BoxPainter.<init>(StyleSheet.java:1738) at javax.swing.text.html.StyleSheet.getBoxPainter(StyleSheet.java:880) at javax.swing.text.html.BlockView.setPropertiesFromAttributes(BlockView.java:389) at javax.swing.text.html.BlockView.setParent(BlockView.java:57) at javax.swing.text.CompositeView.replace(CompositeView.java:200) at javax.swing.text.BoxView.replace(BoxView.java:164) at javax.swing.text.html.TableView$RowView.replace(TableView.java:1414) at javax.swing.text.CompositeView.loadChildren(CompositeView.java:97) at javax.swing.text.CompositeView.setParent(CompositeView.java:122) at javax.swing.text.CompositeView.replace(CompositeView.java:200) at javax.swing.text.BoxView.replace(BoxView.java:164) at javax.swing.text.html.TableView.replace(TableView.java:864) at javax.swing.text.View.updateChildren(View.java:1122) at javax.swing.text.View.insertUpdate(View.java:706) at javax.swing.text.html.TableView.insertUpdate(TableView.java:804) at javax.swing.text.View.forwardUpdateToView(View.java:1213) at javax.swing.text.View.forwardUpdate(View.java:1188) at javax.swing.text.BoxView.forwardUpdate(BoxView.java:222) at javax.swing.text.View.insertUpdate(View.java:712) at javax.swing.text.View.forwardUpdateToView(View.java:1213) at javax.swing.text.View.forwardUpdate(View.java:1188) at javax.swing.text.BoxView.forwardUpdate(BoxView.java:222) at javax.swing.text.View.insertUpdate(View.java:712) at javax.swing.text.View.forwardUpdateToView(View.java:1213) at javax.swing.text.View.forwardUpdate(View.java:1188) at javax.swing.text.BoxView.forwardUpdate(BoxView.java:222) at javax.swing.text.html.TableView.forwardUpdate(TableView.java:845) at javax.swing.text.View.insertUpdate(View.java:712) at javax.swing.text.html.TableView.insertUpdate(TableView.java:804) at javax.swing.text.View.forwardUpdateToView(View.java:1213) at javax.swing.text.View.forwardUpdate(View.java:1188) at javax.swing.text.BoxView.forwardUpdate(BoxView.java:222) at javax.swing.text.View.insertUpdate(View.java:712) at javax.swing.text.View.forwardUpdateToView(View.java:1213) at javax.swing.text.View.forwardUpdate(View.java:1188) at javax.swing.text.BoxView.forwardUpdate(BoxView.java:222) at javax.swing.text.View.insertUpdate(View.java:712) at javax.swing.plaf.basic.BasicTextUI$RootView.insertUpdate(BasicTextUI.java:1489) at javax.swing.plaf.basic.BasicTextUI$UpdateHandler.insertUpdate(BasicTextUI.java:1729) at javax.swing.text.AbstractDocument.fireInsertUpdate(AbstractDocument.java:184) at javax.swing.text.DefaultStyledDocument.insert(DefaultStyledDocument.java:201) at javax.swing.text.html.HTMLDocument.insert(HTMLDocument.java:230) at javax.swing.text.html.HTMLDocument$HTMLReader.flushBuffer(HTMLDocument.java:3215) at javax.swing.text.html.HTMLDocument$HTMLReader.flush(HTMLDocument.java:2055) at javax.swing.text.html.HTMLEditorKit.read(HTMLEditorKit.java:231) at javax.swing.JEditorPane.read(JEditorPane.java:506) at javax.swing.JEditorPane$PageLoader.run(JEditorPane.java:553) "DestroyJavaVM" prio=1 tid=0x0x80521f0 nid=0x109c waiting on condition [0..bfffd5c4] "Java2D Disposer" daemon prio=1 tid=0x0x81b84b8 nid=0x10ab in Object.wait() [bdfff000..bdfff850] at j
11-06-2004

WORK AROUND Name: ik75403 Date: 03/10/2003 you could make JEditorPane invisible until it is fully rendered then this deadlock should not occur ======================================================================
11-06-2004