United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
Bug ID: JDK-6668033 New plugin applet freezes the browser occasionally
JDK-6668033 : New plugin applet freezes the browser occasionally

Details
Type:
Bug
Submit Date:
2008-02-26
Status:
Closed
Updated Date:
2010-09-08
Project Name:
JDK
Resolved Date:
2008-05-28
Component:
deploy
OS:
generic,windows
Sub-Component:
plugin
CPU:
x86,generic
Priority:
P3
Resolution:
Fixed
Affected Versions:
6u1,6u10
Fixed Versions:
6u10 (b21)

Related Reports
Duplicate:
Duplicate:
Duplicate:
Duplicate:
Duplicate:
Relates:
Relates:

Sub Tasks

Description
Occasional test applets, using th enew plugin freezing IE on windows.

PIT build(dated-Feb22) 

Windows

IE

+++

2008-02-26 10:07:00
Full thread dump Java HotSpot(TM) Client VM (11.0-b11 mixed mode, sharing):

"JRE 1.6.0.10 Heartbeat Thread" prio=6 tid=0x07377800 nid=0x101c waiting on condition [0x0766f000..0x0766fb94]
?? ??java.lang.Thread.State: TIMED_WAITING (sleeping)
????????????????at java.lang.Thread.sleep(Native Method)
????????????????at sun.plugin2.main.server.JVMInstance$HeartbeatThread.run(Unknown Source)

?? ??Locked ownable synchronizers:
????????????????- None

"JRE 1.6.0.10 Worker Thread" prio=6 tid=0x07386800 nid=0xe78 in Object.wait() [0x07b7f000..0x07b7fc14]
?? ??java.lang.Thread.State: TIMED_WAITING (on object monitor)
????????????????at java.lang.Object.wait(Native Method)
????????????????- waiting on <0x25a501e0> (a sun.plugin2.message.Queue)
????????????????at sun.plugin2.message.Queue.waitForMessage(Unknown Source)
????????????????- locked <0x25a501e0> (a sun.plugin2.message.Queue)
????????????????at sun.plugin2.message.Pipe.receive(Unknown Source)
????????????????at sun.plugin2.main.server.JVMInstance$WorkerThread.run(Unknown Source)

?? ??Locked ownable synchronizers:
????????????????- None

"JRE 1.6.0.10 Output Reader Thread" prio=6 tid=0x07385000 nid=0x1558 runnable [0x07a7f000..0x07a7fc94]
?? ??java.lang.Thread.State: RUNNABLE
????????????????at java.io.FileInputStream.readBytes(Native Method)
????????????????at java.io.FileInputStream.read(Unknown Source)
????????????????at sun.plugin2.main.server.JVMInstance$StreamMonitor.run(Unknown Source)
????????????????at java.lang.Thread.run(Unknown Source)

?? ??Locked ownable synchronizers:
????????????????- None

"JRE 1.6.0.10 Output Reader Thread" prio=6 tid=0x07383c00 nid=0xa8 runnable [0x0797f000..0x0797fd14]
?? ??java.lang.Thread.State: RUNNABLE
????????????????at java.io.FileInputStream.readBytes(Native Method)
????????????????at java.io.FileInputStream.read(Unknown Source)
????????????????at java.io.BufferedInputStream.fill(Unknown Source)
????????????????at java.io.BufferedInputStream.read1(Unknown Source)
????????????????at java.io.BufferedInputStream.read(Unknown Source)
????????????????- locked <0x25a53348> (a java.io.BufferedInputStream)
????????????????at java.io.FilterInputStream.read(Unknown Source)
????????????????at sun.plugin2.main.server.JVMInstance$StreamMonitor.run(Unknown Source)
????????????????at java.lang.Thread.run(Unknown Source)

?? ??Locked ownable synchronizers:
????????????????- None

"Thread-0" prio=6 tid=0x07382c00 nid=0x1720 runnable [0x0787f000..0x0787fd94]
?? ??java.lang.Thread.State: RUNNABLE
????????????????at java.lang.ProcessImpl.waitFor(Native Method)
????????????????at sun.plugin2.jvm.JVMLauncher$JVMWatcher.run(Unknown Source)
????????????????at java.lang.Thread.run(Unknown Source)

?? ??Locked ownable synchronizers:
????????????????- None

"Java Plug-In Pipe Worker Thread (Server-Side)" prio=6 tid=0x07381000 nid=0x10a4 runnable [0x0776f000..0x0776fa14]
?? ??java.lang.Thread.State: RUNNABLE
????????????????at sun.plugin2.os.windows.Windows.ReadFile0(Native Method)
????????????????at sun.plugin2.os.windows.Windows.ReadFile(Unknown Source)
????????????????at sun.plugin2.ipc.windows.WindowsNamedPipe.read(Unknown Source)
????????????????at sun.plugin2.message.transport.NamedPipeTransport$SerializerImpl.read(Unknown Source)
????????????????at sun.plugin2.message.transport.NamedPipeTransport$SerializerImpl.readByte(Unknown Source)
????????????????at sun.plugin2.message.AbstractSerializer.readInt(Unknown Source)
????????????????at sun.plugin2.message.transport.SerializingTransport.read(Unknown Source)
????????????????at sun.plugin2.message.Pipe$WorkerThread.run(Unknown Source)

?? ??Locked ownable synchronizers:
????????????????- None

"traceMsgQueueThread" daemon prio=6 tid=0x06af8800 nid=0xa78 in Object.wait() [0x0736f000..0x0736fb94]
?? ??java.lang.Thread.State: WAITING (on object monitor)
????????????????at java.lang.Object.wait(Native Method)
????????????????- waiting on <0x25a54610> (a java.util.ArrayList)
????????????????at java.lang.Object.wait(Object.java:485)
????????????????at com.sun.deploy.util.Trace$TraceMsgQueueChecker.run(Unknown Source)
????????????????- locked <0x25a54610> (a java.util.ArrayList)
????????????????at java.lang.Thread.run(Unknown Source)

?? ??Locked ownable synchronizers:
????????????????- None

"Low Memory Detector" daemon prio=6 tid=0x06aa4c00 nid=0xcf0 runnable [0x00000000..0x00000000]
?? ??java.lang.Thread.State: RUNNABLE

?? ??Locked ownable synchronizers:
????????????????- None

"CompilerThread0" daemon prio=10 tid=0x06a9e400 nid=0xa00 waiting on condition [0x00000000..0x0706f640]
?? ??java.lang.Thread.State: RUNNABLE

?? ??Locked ownable synchronizers:
????????????????- None

"Attach Listener" daemon prio=10 tid=0x06a9cc00 nid=0x12f4 waiting on condition [0x00000000..0x00000000]
?? ??java.lang.Thread.State: RUNNABLE

?? ??Locked ownable synchronizers:
????????????????- None

"Signal Dispatcher" daemon prio=10 tid=0x06a9b800 nid=0x1108 runnable [0x00000000..0x00000000]
?? ??java.lang.Thread.State: RUNNABLE

?? ??Locked ownable synchronizers:
????????????????- None

"Finalizer" daemon prio=8 tid=0x06a96c00 nid=0x11a4 in Object.wait() [0x06d6f000..0x06d6fa94]
?? ??java.lang.Thread.State: WAITING (on object monitor)
????????????????at java.lang.Object.wait(Native Method)
????????????????- waiting on <0x25a54838> (a java.lang.ref.ReferenceQueue$Lock)
????????????????at java.lang.ref.ReferenceQueue.remove(Unknown Source)
????????????????- locked <0x25a54838> (a java.lang.ref.ReferenceQueue$Lock)
????????????????at java.lang.ref.ReferenceQueue.remove(Unknown Source)
????????????????at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)

?? ??Locked ownable synchronizers:
????????????????- None

"Reference Handler" daemon prio=10 tid=0x06a92000 nid=0x10d8 in Object.wait() [0x06c6f000..0x06c6fb14]
?? ??java.lang.Thread.State: WAITING (on object monitor)
????????????????at java.lang.Object.wait(Native Method)
????????????????- waiting on <0x25a50148> (a java.lang.ref.Reference$Lock)
????????????????at java.lang.Object.wait(Object.java:485)
????????????????at java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)
????????????????- locked <0x25a50148> (a java.lang.ref.Reference$Lock)

?? ??Locked ownable synchronizers:
????????????????- None

"main" prio=6 tid=0x02ba9c00 nid=0x16dc runnable [0x0013d000..0x0013e674]
?? ??java.lang.Thread.State: RUNNABLE
????????????????at sun.plugin2.main.server.WindowsHelper.runMessagePump0(Native Method)
????????????????at sun.plugin2.main.server.WindowsHelper.runMessagePump(Unknown Source)
????????????????at sun.plugin2.main.server.IExplorerPlugin.runMessagePump(Unknown Source)
????????????????at sun.plugin2.main.server.IExplorerPlugin.runMessagePump(Unknown Source)
????????????????at sun.plugin2.main.server.IExplorerPlugin.access$400(Unknown Source)
????????????????at sun.plugin2.main.server.IExplorerPlugin$1.waitForSignal(Unknown Source)
????????????????at sun.plugin2.main.server.ResultHandler.waitForResult(Unknown Source)
????????????????at sun.plugin2.main.server.AbstractPlugin.getScriptingObjectForApplet(Unknown Source)
????????????????at sun.plugin2.main.server.IExplorerPlugin.getScriptingObjectForApplet(Unknown Source)

?? ??Locked ownable synchronizers:
????????????????- None

"VM Thread" prio=10 tid=0x06a90800 nid=0x10cc runnable 

"VM Periodic Task Thread" prio=10 tid=0x06ab8400 nid=0x1684 waiting on condition 

JNI global references: 710
Jitender could reproduce this freeze as follows:

This single instance testcase is haning for me on IE6 nad IE7.
http://nicole1.sfbay.sun.com:8080/plugin_tests/JNLPSupport/applets/AppletBasics/JNLPSingleInstanceService1-jnlp-applet-rel1.html

Windows, IE6 and IE7

+++

GNU/Linux x86 FF3, after fix for CR 6665008 not reproducable.

                                    

Comments
EVALUATION

Cause of the browser freeze is the LiveConnect (LC) communication with the server,
where the browser waits forever for a LC response.
                                     
2008-02-26
EVALUATION

The browser freezes only occures for the single instance services and on this browser.
CR 6665008 should have already fixed the worst,
but must be still verified
                                     
2008-02-28
SUGGESTED FIX

SingleInstance Browser Freeze:
    - JNLP2Manager, Plugin2Manager
        - In case of an already existent instance,
          send a proper appletAbort message to the server.

+++

JREInfo bug introduced in CR 6665008

    - addJRE uses 'findByPath' to determine if the
      to be added instance is a dublicate

    - findByPath did not consider the '_system' attribute,
      therefor a new JREInfo could not exist in the user properties.
      Therefor JREInfo would not be stored within the deployment.property,
      and a relaunch would not be successfull.

+++

Synced OOPP JNLP2Manager with JAVAWS Launcher.java

    - Launcher.java
        - using MatchJREIf properly
        - branch cleanups ;-)

    - JNLP2Manager.downloadJREResource()
        - pre JRE download:
            - respect Config.AUTODOWNLOAD_MODE_NEVER
            - use defaultUrl 'Config.JAVAWS_JRE_INSTALL_KEY' for platform version,
              where location==null
            - add SecureStaticVersioning.promptRequired(..)
                - using DownloadEngine.getAvailableVersion(..)

    - JNLP2Manager
        - removed dead cases:
            - isInstaller
            - isImport
            - isSilent
        - added local application properties _lap

+++

JNLP JREDesc select
    - Consolidating LaunchSelection.MatchJREIf
        - removing sun.plugin2.applet.Plugin2MatchJRE
        - common implementation is com.sun.javaws.DefaultMatchJRE.

    - LaunchSelection
        - Complete traversal through the whole JNLP graph

    - MatchJREIf / DefaultMatchJRE

        - Now designed to
            - start traversal
            - digest all JREDesc while traversing
            - end traversal

        - Results:
            - JVMParameters for the desired JVM arguments,
              which are accumulated from all JREDesc:
                - max heapsize wins
                - unique arguments
                - chronological order from inside to outside,
                  the JNLP graph

            - JREInfo for the desired and installed JRE version
                - the highes JRE version required/allowed
                  in the JNLP graph

            - isRunningJVMSatisfying() if the running JREInfo
              satisfy us, i.e. JRE version and jvm arguments

    - sun.plugin2.util.BufferUtil
        moved to com.sun.deploy.util.BufferUtil

    - sun.plugin2.util.ArgUtil
          moved into com.sun.deploy.util.JVMParameters

    - sun.plugin2.util.JVMParameters
          moved to com.sun.deploy.util.JVMParameters

    - JVMParameters.Property
        Presents a system property hashed by the key only.
        This allows us to make properties unique by their keys.

    - JVMParameters.ArgumentSet
        - Using com.sun.deploy.util.OrderedLinkedHashSet
          and removing old entries before adding them,
          which gives us all arguments in the chronological order
          without duplicated.

        - systemProperties is JVMParameters.Property,
          so no double properties anymore.

        - Adding static homeJVMParameters, holding the running JVM's parameter.
          This shall be set by the launching JVM entity.

    - OrderedLinkedHashSet
          package com.sun.deploy.util;

          Implements pure Java 1.3 sort of LinkedHashSet,
          which fully implements List as well.
          It uses HashMap and LinkedList.
          It's 'add(Object o)' will move a pre-existing object to the end of the list,
          and therefor is very strict to it's order.

+++

JNLP relative codebase
    - Since the new semantics of relative codebase,
      always use the jnlp file's basedir as the fallback codebase,
      i.e. if the jnlp file doesn't contain any codebase.
      We don't just use the parents codebase...

    - codebase from documentbase must strip the filename,
      i.e. the basedir.

      True is for http://aaa.org/

        html/a.html -> ../jnlp/a.jnlp
        jnlp/a.jnlp (no codebase)
            codebase = http://aaa.org/jnlp/

        html/a.html -> ../jnlp/a.jnlp
        jnlp/a.jnlp (codebase="codebasedir")
            codebase = http://aaa.org/jnlp/codebasedir/

      Added 2 more rel codebase tests ..

    - Organized all tests in grouped html pages ..
                                     
2008-03-02



Hardware and Software, Engineered to Work Together