United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
Bug ID: 6477348 browser become non-responsive if we switch page during applet JAR initial download
6477348 : browser become non-responsive if we switch page during applet JAR initial download

Details
Type:
Bug
Submit Date:
2006-10-02
Status:
Resolved
Updated Date:
2010-04-04
Project Name:
JDK
Resolved Date:
2006-10-18
Component:
deploy
OS:
generic
Sub-Component:
plugin
CPU:
generic
Priority:
P3
Resolution:
Fixed
Affected Versions:
5.0u11
Fixed Versions:
5.0u11

Related Reports
Relates:

Sub Tasks

Description
problem only exists in 5.0, java 6 does not have this problem.

when we run an applet that requires downloading a large JAR file to start, if we switch to another page in the browser, the browser will become non-responsive until the JAR download is complete.

                                    

Comments
EVALUATION

It was fixed in mustang with 5089064.
The engineer who fixed the 5089064 said we should backport it into tiger, but no one did it.
                                     
2006-10-12
EVALUATION

This hang is due to a deadlock between the main thread and the loader thread (Thread-4).
The main thread is
waiting to lock <0x214055b8> (a sun.plugin.security.PluginClassLoader)
which is being held by the loader thread.

I dug in to the code and sccs history a bit and I think I can conclude that the problem is caused by the fix for
4990841 in the plugin ClassLoaderInfo.java

The problem isn't reproducible in mustang because part (or almost all) of the fix for 4990841 was removed by the fixes for
5023873 and 5089061.

The piece of code in question is in ClassLoaderInfo.addZombie.
The else part is giving us problem here.

         if (acl != null) {
             if (acl.getExceptionStatus()) {
            cli.clearLoaderRef();
       } else {
           acl.clearAssertionStatus();
       }
           }
                                     
2006-10-03
EVALUATION

java thread dump when hang occur on windows with 5u10

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

"Thread-4" prio=4 tid=0x05700008 nid=0xf50 runnable [0x0fb3e000..0x0fb3fd68]
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(Unknown Source)
        at java.io.BufferedInputStream.read1(Unknown Source)
        at java.io.BufferedInputStream.read(Unknown Source)
        - locked <0x20c02278> (a java.io.BufferedInputStream)
        at sun.net.www.MeteredStream.read(Unknown Source)
        - locked <0x20c02298> (a sun.net.www.http.KeepAliveStream)
        at java.io.FilterInputStream.read(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(Unkn
own Source)
        at java.io.BufferedInputStream.fill(Unknown Source)
        at java.io.BufferedInputStream.read1(Unknown Source)
        at java.io.BufferedInputStream.read(Unknown Source)
        - locked <0x20c022e0> (a java.io.BufferedInputStream)
        at java.io.FilterInputStream.read(Unknown Source)
        at java.io.PushbackInputStream.read(Unknown Source)
        at java.util.zip.InflaterInputStream.fill(Unknown Source)
        at java.util.zip.InflaterInputStream.read(Unknown Source)
        at java.util.zip.ZipInputStream.read(Unknown Source)
        at sun.plugin.cache.CachedJarLoader.decompressWrite(Unknown Source)
        at sun.plugin.cache.CachedJarLoader.decompress(Unknown Source)
        at sun.plugin.cache.CachedJarLoader.access$500(Unknown Source)
        at sun.plugin.cache.CachedJarLoader$5.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.plugin.cache.CachedJarLoader.download(Unknown Source)
        at sun.plugin.cache.CachedJarLoader.load(Unknown Source)
        at sun.plugin.cache.JarCache.get(Unknown Source)
        at sun.plugin.net.protocol.jar.CachedJarURLConnection.connect(Unknown So
urce)
        at sun.plugin.net.protocol.jar.CachedJarURLConnection.getJarFile(Unknown
 Source)
        at sun.misc.URLClassPath$JarLoader.getJarFile(Unknown Source)
        at sun.misc.URLClassPath$JarLoader.<init>(Unknown Source)
        at sun.misc.URLClassPath$3.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.misc.URLClassPath.getLoader(Unknown Source)
        at sun.misc.URLClassPath.getLoader(Unknown Source)
        - locked <0x214069b8> (a sun.misc.URLClassPath)
        at sun.misc.URLClassPath.getResource(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at sun.applet.AppletClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        - locked <0x214055b8> (a sun.plugin.security.PluginClassLoader)
        at sun.applet.AppletClassLoader.loadClass(Unknown Source)
        - locked <0x214055b8> (a sun.plugin.security.PluginClassLoader)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.applet.AppletClassLoader.loadCode(Unknown Source)
        at sun.applet.AppletPanel.createApplet(Unknown Source)
        at sun.plugin.AppletViewer.createApplet(Unknown Source)
        at sun.applet.AppletPanel.runLoader(Unknown Source)
        at sun.applet.AppletPanel.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

"thread applet-AppletDemoTest1" prio=4 tid=0x05736458 nid=0xafc in Object.wait()
 [0x0f93f000..0x0f93fa68]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x20c001a0> (a java.lang.Thread)
        at java.lang.Thread.join(Unknown Source)
        - locked <0x20c001a0> (a java.lang.Thread)
        at java.lang.Thread.join(Unknown Source)
        at sun.applet.AppletPanel.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

"TimerQueue" daemon prio=6 tid=0x0572c998 nid=0xfc8 in Object.wait() [0x0e3bf000
..0x0e3bfbe8]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x213f49e8> (a javax.swing.TimerQueue)
        at javax.swing.TimerQueue.run(Unknown Source)
        - locked <0x213f49e8> (a javax.swing.TimerQueue)
        at java.lang.Thread.run(Unknown Source)

"AWT-EventQueue-0" prio=6 tid=0x0571c110 nid=0x714 in Object.wait() [0x0620f000.
.0x0620fc68]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x212ffe28> (a java.awt.EventQueue)
        at java.lang.Object.wait(Unknown Source)
        at java.awt.EventQueue.getNextEvent(Unknown Source)
        - locked <0x212ffe28> (a java.awt.EventQueue)
        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)

"ConsoleWriterThread" daemon prio=6 tid=0x056cb5f0 nid=0x8e0 in Object.wait() [0
x0610f000..0x0610fce8]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x2135f308> (a java.lang.Object)
        at java.lang.Object.wait(Unknown Source)
        at com.sun.deploy.util.ConsoleTraceListener$ConsoleWriterThread.run(Unkn
own Source)
        - locked <0x2135f308> (a java.lang.Object)

"AWT-EventQueue-1" prio=6 tid=0x056b49c0 nid=0x36c in Object.wait() [0x05f8f000.
.0x05f8fd68]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x2134d020> (a java.awt.EventQueue)
        at java.lang.Object.wait(Unknown Source)
        at java.awt.EventQueue.getNextEvent(Unknown Source)
        - locked <0x2134d020> (a java.awt.EventQueue)
        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)

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

"AWT-Windows" daemon prio=6 tid=0x056a13f8 nid=0xe60 runnable [0x05b7f000..0x05b
7fae8]
        at sun.awt.windows.WToolkit.eventLoop(Native Method)
        at sun.awt.windows.WToolkit.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

"AWT-Shutdown" prio=6 tid=0x056a0fd8 nid=0xb44 in Object.wait() [0x05a7f000..0x0
5a7fb68]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x21310f58> (a java.lang.Object)
        at java.lang.Object.wait(Unknown Source)
        at sun.awt.AWTAutoShutdown.run(Unknown Source)
        - locked <0x21310f58> (a java.lang.Object)
        at java.lang.Thread.run(Unknown Source)

"Java2D Disposer" daemon prio=10 tid=0x0569fb80 nid=0x2c8 in Object.wait() [0x05
97f000..0x0597fbe8]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x21310fe0> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(Unknown Source)
        - locked <0x21310fe0> (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=0x02da3c90 nid=0xd10 runnable [0x0000000
0..0x00000000]

"CompilerThread0" daemon prio=10 tid=0x02da2910 nid=0x6b0 waiting on condition [
0x00000000..0x0546f6c8]

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

"Finalizer" daemon prio=8 tid=0x02d70dd0 nid=0xf9c in Object.wait() [0x0526f000.
.0x0526fa68]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x21311188> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(Unknown Source)
        - locked <0x21311188> (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=0x02d6f950 nid=0x754 in Object.wait() [0x
0516f000..0x0516fae8]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x21310df0> (a java.lang.ref.Reference$Lock)
        at java.lang.Object.wait(Unknown Source)
        at java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)
        - locked <0x21310df0> (a java.lang.ref.Reference$Lock)

"main" prio=6 tid=0x02cf1760 nid=0x4f0 waiting for monitor entry [0x0013e000..0x
0013e5e4]
        at java.lang.ClassLoader.clearAssertionStatus(Unknown Source)
        - waiting to lock <0x214055b8> (a sun.plugin.security.PluginClassLoader)

        at sun.plugin.ClassLoaderInfo.addZombie(Unknown Source)
        - locked <0x26cd7d40> (a java.lang.Class)
        at sun.plugin.ClassLoaderInfo.removeReference(Unknown Source)
        - locked <0x21406c20> (a sun.plugin.ClassLoaderInfo)
        at sun.plugin.AppletViewer.appletDestroy(Unknown Source)
        at sun.plugin.AppletViewer.appletDestroy(Unknown Source)
        at sun.plugin.viewer.LifeCycleManager.destroyAppletPanel(Unknown Source)

        at sun.plugin.viewer.IExplorerPluginObject.destroyPlugin(Unknown Source)


"VM Thread" prio=10 tid=0x02d6cf98 nid=0xc28 runnable

"VM Periodic Task Thread" prio=10 tid=0x02da4ee8 nid=0xe3c waiting on condition
                                     
2006-10-02



Hardware and Software, Engineered to Work Together