Closed Bug 506794 Opened 16 years ago Closed 15 years ago

loading javafx.com hangs after a few page refresh

Categories

(Plugins Graveyard :: Java (Java Embedding Plugin), defect)

x86
macOS
defect
Not set
critical

Tracking

(Not tracked)

RESOLVED FIXED

People

(Reporter: thomas.v.ng, Assigned: smichaud)

References

()

Details

Attachments

(12 files)

User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19 Build Identifier: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1 Refreshing javafx.com main page a few times cause firefox to hang Reproducible: Always Steps to Reproduce: 1. Open a few tabs and load some content, cnn.com, wired.com, etc 2. open a new tab to javafx.com, this will trigger loading of javafx applet 3. click yes on any security dialog pop up 4. refresh a few times, browser will hang this only happens with the MRJ plugin on MacOS; windows works fine. Also, if switch to new plugin on MacOS, bug cannot be reproduced. Expected Results: browser/plugin should not hang Date/Time: 2009-07-27 16:41:28 -0700 OS Version: 10.5.7 (Build 9J61) Architecture: i386 Report Version: 4 Command: Firefox Path: /Applications/Firefox.app/Contents/MacOS/firefox-bin Version: 3.5.1 (3.5.1) Parent: launchd [117] PID: 4259 Event: hang Time: 9.39s Steps: 47 Process: firefox-bin [4259] Path: /Applications/Firefox.app/Contents/MacOS/firefox-bin ADDRESS BINARY 00001000 /Applications/Firefox.app/Contents/MacOS/firefox-bin 00006000 /Applications/Firefox.app/Contents/MacOS/libxpcom.dylib 0000b000 /Applications/Firefox.app/Contents/MacOS/libplds4.dylib 00014000 /Applications/Firefox.app/Contents/MacOS/libplc4.dylib 00035000 /Applications/Firefox.app/Contents/MacOS/libnspr4.dylib 00071000 /Applications/Firefox.app/Contents/MacOS/libsmime3.dylib 0008f000 /Applications/Firefox.app/Contents/MacOS/libssl3.dylib 000de000 /Applications/Firefox.app/Contents/MacOS/libmozjs.dylib 001bc000 /Applications/Firefox.app/Contents/MacOS/libsqlite3.dylib 0022d000 /Applications/Firefox.app/Contents/MacOS/libnss3.dylib 002f9000 /Applications/Firefox.app/Contents/MacOS/libnssutil3.dylib 0030f000 /Applications/Firefox.app/Contents/MacOS/libsoftokn3.dylib 00379000 /Applications/Firefox.app/Contents/MacOS/components/libbrowserdirprovider.dylib 0063c000 /Applications/Firefox.app/Contents/MacOS/components/libalerts_s.dylib 00693000 /Applications/Firefox.app/Contents/MacOS/components/libbrowsercomps.dylib 006fa000 /System/Library/CoreServices/Encodings/libSimplifiedChineseConverter.dylib 00b38000 /System/Library/TextEncodings/Unicode Encodings.bundle/Contents/MacOS/Unicode Encodings 00e8d000 /Applications/Firefox.app/Contents/MacOS/XUL 15145000 /System/Library/CoreServices/Encodings/libTraditionalChineseConverter.dylib 152a4000 /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Libraries/libfontmanager.jnilib 154c9000 /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Libraries/libdeploy.jnilib 154d8000 /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Libraries/liblaf.jnilib 15c66000 /System/Library/Frameworks/OpenGL.framework/Versions/A/Resources/GLRendererFloat.bundle/GLRendererFloat 1687d000 /private/var/folders/Sd/SdwfRQXzH5mb9luQVz41Wk+++TI/-Tmp-/jnlp-applet/jln5581544334128741232/jln4690762644789988447/libdecora-sse.jnilib 16df6000 /System/Library/Frameworks/OpenGL.framework/Resources/GLEngine.bundle/GLEngine 16fa9000 /System/Library/Extensions/GeForce8xxxGLDriver.bundle/Contents/MacOS/GeForce8xxxGLDriver 177ce000 /private/var/folders/Sd/SdwfRQXzH5mb9luQVz41Wk+++TI/-Tmp-/jnlp-applet/jln5581544334128741232/jln8885381185793581241/libjogl.jnilib 17fa9000 /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Libraries/libnet.jnilib 17fbb000 /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Libraries/libnio.jnilib 18222000 /private/var/folders/Sd/SdwfRQXzH5mb9luQVz41Wk+++TI/-Tmp-/jnlp-applet/jln5581544334128741232/jln8885381185793581241/libKeyChainLibrary.jnilib 1845f000 /private/var/folders/Sd/SdwfRQXzH5mb9luQVz41Wk+++TI/-Tmp-/jnlp-applet/jln5581544334128741232/jln8885381185793581241/libdecora-sse.jnilib 1a0ab000 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/ATSHI.dylib 1a2d4000 /Applications/Firefox.app/Contents/MacOS/libnssdbm3.dylib 1a880000 /Applications/Firefox.app/Contents/MacOS/libfreebl3.dylib 1a8f0000 /Applications/Firefox.app/Contents/MacOS/libnssckbi.dylib 1ab58000 /System/Library/CoreServices/RawCamera.bundle/Contents/MacOS/RawCamera 1b5e0000 /private/var/folders/Sd/SdwfRQXzH5mb9luQVz41Wk+++TI/-Tmp-/jnlp-applet/jln5581544334128741232/jln6066953498965218818/libjogl.jnilib 1b8fe000 /private/var/folders/Sd/SdwfRQXzH5mb9luQVz41Wk+++TI/-Tmp-/jnlp-applet/jln5581544334128741232/jln2064063422567600152/libdecora-sse.jnilib 1bf2f000 /private/var/folders/Sd/SdwfRQXzH5mb9luQVz41Wk+++TI/-Tmp-/jnlp-applet/jln5581544334128741232/jln4690762644789988447/libjogl.jnilib 1c5e5000 /System/Library/Frameworks/JavaVM.framework/Versions/A/JavaVM 1c827000 /Library/Internet Plug-Ins/QuickTime Plugin.plugin/Contents/MacOS/QuickTime Plugin 1c88d000 /System/Library/Frameworks/JavaVM.framework/Versions/A/Frameworks/JavaNativeFoundation.framework/Versions/A/JavaNativeFoundation 1c8d8000 /Applications/Firefox.app/Contents/MacOS/plugins/MRJPlugin.plugin/Contents/MacOS/MRJPlugin 1c912000 /Applications/Firefox.app/Contents/MacOS/plugins/JavaEmbeddingPlugin.bundle/Contents/MacOS/JavaEmbeddingPlugin 1c955000 /System/Library/Frameworks/JavaVM.framework/Versions/1.5/Libraries/libawt.jnilib 1cb8c000 /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Libraries/libjava.jnilib 1cbb5000 /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Libraries/libverify.dylib 1cbc2000 /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Libraries/libclient.dylib 1cf84000 /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Libraries/libzip.jnilib 2b78a000 /System/Library/Frameworks/JavaVM.framework/Versions/1.5/Resources/JavaPluginCocoa.bundle/Contents/MacOS/JavaPluginCocoa 2bdfc000 /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Libraries/libcmm.jnilib 2be09000 /System/Library/Frameworks/CoreAudioKit.framework/Versions/A/CoreAudioKit 2be8b000 /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Libraries/libsuncmm.jnilib 2bf1c000 /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Libraries/libjpeg.jnilib 2c842000 /private/var/folders/Sd/SdwfRQXzH5mb9luQVz41Wk+++TI/-Tmp-/jnlp-applet/jln5581544334128741232/jln6066953498965218818/libdecora-sse.jnilib 2c992000 /private/var/folders/Sd/SdwfRQXzH5mb9luQVz41Wk+++TI/-Tmp-/jnlp-applet/jln5581544334128741232/jln632088687392941878/libjogl.jnilib 2ca74000 /private/var/folders/Sd/SdwfRQXzH5mb9luQVz41Wk+++TI/-Tmp-/jnlp-applet/jln5581544334128741232/jln632088687392941878/libdecora-sse.jnilib 2de45000 /private/var/folders/Sd/SdwfRQXzH5mb9luQVz41Wk+++TI/-Tmp-/jnlp-applet/jln5581544334128741232/jln2064063422567600152/libjogl.jnilib 2ee10000 /private/var/folders/Sd/SdwfRQXzH5mb9luQVz41Wk+++TI/-Tmp-/jnlp-applet/jln5581544334128741232/jln464050520297428450/libdecora-sse.jnilib 309e0000 /private/var/folders/Sd/SdwfRQXzH5mb9luQVz41Wk+++TI/-Tmp-/jnlp-applet/jln5581544334128741232/jln1245102932079094231/libdecora-sse.jnilib 30cc0000 /private/var/folders/Sd/SdwfRQXzH5mb9luQVz41Wk+++TI/-Tmp-/jnlp-applet/jln5581544334128741232/jln1245102932079094231/libjogl.jnilib 313f3000 /private/var/folders/Sd/SdwfRQXzH5mb9luQVz41Wk+++TI/-Tmp-/jnlp-applet/jln5581544334128741232/jln464050520297428450/libjogl.jnilib 33bd3000 /private/var/folders/Sd/SdwfRQXzH5mb9luQVz41Wk+++TI/-Tmp-/jnlp-applet/jln5581544334128741232/jln2674010676198759141/libdecora-sse.jnilib 33de0000 /private/var/folders/Sd/SdwfRQXzH5mb9luQVz41Wk+++TI/-Tmp-/jnlp-applet/jln5581544334128741232/jln2674010676198759141/libjogl.jnilib 36900000 /Library/Internet Plug-Ins/Flash Player.plugin/Contents/MacOS/Flash Player ba900000 /System/Library/CoreServices/Encodings/libJapaneseConverter.dylib bab00000 /System/Library/CoreServices/Encodings/libKoreanConverter.dylib Thread id: 89178b8 User stack: 46 start + 41 (in firefox-bin) [0x2469] 46 start + 258 (in firefox-bin) [0x2542] 46 start + 2168 (in firefox-bin) [0x2cb8] 46 _XRE_main + 9880 (in XUL) [0xe95308] 46 __ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIP8nsRefPtrI13imgCacheEntryESt6vectorIS4_SaIS4_EEEEiS4_PFbRKS4_SB_EEvT_T0_SF_T1_T2_ + 6497543 (in XUL) [0x1683f77] 46 _JSD_GetValueForObject + 826154 (in XUL) [0x17e8d8a] 46 -[NSApplication run] + 795 (in AppKit) [0x949585fb] 46 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 128 (in AppKit) [0x9495f5c0] 46 __DPSNextEvent + 657 (in AppKit) [0x9495fd0d] 46 _BlockUntilNextEventMatchingListInMode + 106 (in HIToolbox) [0x97071f19] 46 _ReceiveNextEventCommon + 374 (in HIToolbox) [0x970720a5] 46 _RunCurrentEventLoopInMode + 283 (in HIToolbox) [0x9707228c] 46 _CFRunLoopRunInMode + 88 (in CoreFoundation) [0x941a9c78] 46 _CFRunLoopRunSpecific + 844 (in CoreFoundation) [0x941a8c9c] 46 ___CFRunLoopDoObservers + 466 (in CoreFoundation) [0x941a7942] 46 __handleWindowNeedsDisplay + 436 (in AppKit) [0x94961e84] 46 -[NSWindow displayIfNeeded] + 189 (in AppKit) [0x94962061] 46 -[NSView displayIfNeeded] + 933 (in AppKit) [0x949624b3] 46 -[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:] + 3090 (in AppKit) [0x94a21adf] 46 -[NSThemeFrame _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 306 (in AppKit) [0x94a24fbb] 46 -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 4433 (in AppKit) [0x94a264d3] 46 -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 4433 (in AppKit) [0x94a264d3] 46 _Java_sun_awt_image_GifImageDecoder_parseImage_redirect + 17756 (in JavaEmbeddingPlugin) [0x1c91ae46] 46 -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 759 (in AppKit) [0x94a25679] 46 -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 1969 (in AppKit) [0x94a270ba] 46 -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 1050 (in AppKit) [0x94a26d23] 46 _Java_sun_awt_image_GifImageDecoder_parseImage_redirect + 47811 (in JavaEmbeddingPlugin) [0x1c9223ad] 46 -[NSView _drawRect:clip:] + 3853 (in AppKit) [0x94a2822c] 46 _PoseAsNSTextFieldFocusView + 451 (in JavaEmbeddingPlugin) [0x1c93bcce] 46 _PoseAsNSCarbonWindowFrame + 952 (in JavaEmbeddingPlugin) [0x1c936258] 46 -[NSViewAWT drawRect:] + 69 (in libawt.jnilib) [0x1c960aa1] 46 -[AWTDrawableContextManager drawRect:withDrawable:] + 349 (in libawt.jnilib) [0x1c960c04] 46 _JNFCallVoidMethod + 84 (in JavaNativeFoundation) [0x1c89005c] 46 _JNI_CreateJavaVM_Impl + 106843 (in libclient.dylib) [0x1cdd2deb] 46 ??? [0x1cc6536c] 46 ??? [0x1ccdb036] 46 ??? [0x1ccdb31a] 46 ??? [0x1f68b227] 46 ??? [0x1f68d9d3] 46 ??? [0x1f68d9d3] 46 ??? [0x1f6ffdc0] 46 ??? [0x1f9b2d4c] 46 ??? [0x1fa03444] 46 ??? [0x1f9b37bc] 46 ??? [0x1f94efbc] 46 ??? [0x1f879080] 46 ??? [0x1fa32a4c] 46 ??? [0x1f8ca434] 46 ??? [0x1f8ca4de] 46 ??? [0x1f701a72] 46 ??? [0x1ccf0373] 46 ??? [0x1cc77af4] 46 _mach_msg_trap + 10 (in libSystem.B.dylib) [0x903f3286]
Assignee: nobody → smichaud
Component: General → Java Embedding Plugin
Product: Firefox → Core
QA Contact: general → java.jep
In understand (from private email) that this problem is still happening. The steps to reproduce from comment #0 are quite vague. Have you been able to find more specific ones? I'd like to see another hang report. But you need to "attach" it (not paste it into a comment). You need to include data on all threads. And it needs to be made with the JEP downloaded from http://javaplugin.sourceforge.net/ -- the JEP bundled with Mozilla browsers has its debug symbols stripped. I recommend installing the new JEP to your /Library/Internet Plug-Ins/ folder, then removing older copy(ies) of the JEP from your Mozilla browser. For more information see the JEP Readme (http://javaplugin.sourceforge.net/Readme.html).
another instance of hang: using 10.6.2 + JRE 1.6.0_15 + FF 3.5.5
another hang, using plugin from soureforge
Bizarrely, neither of these logs appear to include anything from the firefox-bin process, or anything Java-related.
Attached file another hang just now
Just reproduced it again. The FF has 4 tabs and 3 of them running samples on javafx.com. Although you are right, I don't see anything java in the report. But I triggered the hang by pressing refresh in one of the javafx pages. Any hints on how to collect more useful debug info ?
> Any hints on how to collect more useful debug info? Tell me precisely, and in detail, what you did before one of your hangs (one that can be reproduced at least 50% of the time). Tell me exactly what was in each tab. Tell me exactly how you loaded each tab, in which order. (If you opened a menu, tell me what it was and how you did it (keyboard shortcut or mouse)). Make sure everything in every tab is publicly accessible. Tell me exactly what you did (after everything was loaded) to trigger the hang. As for the logs, tell me exactly what you did to generate them.
I just find I can take sample before killing the hang process using process monitor. Attached is the hang sample with java calls in it.
steps I used to reproduce hang: start firefox go to http://javafx.com/ in first tab, applets load open second tab by mouse click on + sign next to first tab second tab, navigate to http://cnn.com open third tab by mouse click on + sign next to second tab third tab, navigate to http://javafx.com/samples/Reversi/index.html open forth tab by mouse click on + sign next to third tab forth tab, http://javafx.com/samples/FullScreenSketch/index.html this applet will pop up security dialog, accept the dialog to let the applet load go back to each tab and press refresh, it should hang when one of the applet reloads. If not, repeat the whole process and try again.
I've finally had time to get back to this ... and I'm still not able to reproduce what your report. Thanks for your detailed steps-to-reproduce from comment #8. They're everything I could have asked for ... except they don't trigger the problem (at least not for me). I tested on OS X 10.6.2, with all the latest updates, using Firefox 3.5.5. This was on a very plain-vanilla install of 10.6.2 (in fact the result of a clean install I'd just done, with no additional software besides XCode 3.2.1). I ran Firefox without any extensions, and without changing any of its settings from the defaults. Thanks also for your sample from comment #7. It appears to show the hang taking place deep inside Apple's JVM. But I can't glean any more information from it than that. Clearly there are one or more additional factors involved here. Try running Firefox with a clean profile (this should get rid of any extensions or customizations to Firefox's settings). If this doesn't stop the problem happening, consider doing a clean install of OS X 10.6.2 to a spare partition and testing on that.
Somebody's sent me another site to test with (in private email) -- which is very busy and slow to load: http://www.vancouver2010.com/olympic-medals/geo-view/ Even with this site (in Firefox 3.5.7) I'm not able to reproduce a hang (though I see long delays). But I do get to a point where the JavaFX applet stops displaying. Interestingly, the same thing (more or less) happens in Safari. Once again I tested on a very plain-vanilla installation of OS X 10.6.2. Here's what I did: 1) Load http://www.vancouver2010.com/olympic-medals/geo-view/ into four tabs in the same window. 2) Rapidly (and randomly) switch between tabs and reload them. Both Firefox and Safari spew lots of Console errors while doing this.
I was able to repro this bug following Thomas' STR on comment 0. I am running Mac OS 10.5.8. User Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.2b5) Gecko/20091204 Firefox/3.6b5 I had about 30 tabs open in two firefox windows. I went to the http://javafx.com/ site and reloaded about 10 times and then I got the pinwheel busy cursor. I couldn't do anything with Firefox: no scrolling, no tabs switching, no access to the chrome UI, and couldn't do anything on the the content frame. This lasted 10 minutes before I did force quit on Firefox. In the Activity Monitor, Firefox had 82 threads running, 699MB real memory, and 2.4GB VSIZE.
Status: UNCONFIRMED → NEW
Ever confirmed: true
same here on Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; vi; rv:1.9.1.7) Gecko/20091221 YFF35 Firefox/3.5.7 with the steps to reproduce from tim
Tim and Tomcat: Please try exactly the same thing in Safari. I'll try your new STR in Firefox and report back.
I just tried a harsher variant of Tim's new STR (40 tabs in each window, reload http://javafx.com/ 30 times) in both FF 3.5.7 and Safari (on OS X 10.6.2) -- no hangs (or other visible problems) in either browser. Then I tried again with http://www.vancouver2010.com/olympic-medals/geo-view/. This time Safari stopped being able to display the applet (as happened with my STR from comment #10), but Firefox actually crashed. Breakpad didn't come up, though. I'm going to try again with opt builds of current 1.9.1-branch and 1.9.2-branch code, to see if I can get some crash stacks (from gdb).
I've now reproduced the "crash" again in gdb, using my STR from comment #14 (though I had to reload http://www.vancouver2010.com/olympic-medals/geo-view/ more than 100 times). But it's not a conventional crash, and I don't see a conventional crash stack. Instead what I see is this (in the Console), just before FF dies: 2010-01-07 10:31:39.184 firefox-bin[160:a0f] Mozilla has caught an Obj-C exception [JavaNativeException: java.lang.OutOfMemoryError: Java heap space] ... Program exited normally. FF used to trigger a crash (a NULL-dereference) on all Objective-C exceptions (as per bug 163260). But it hasn't done this since the patch for bug 486574 landed (which changed to just logging the Objective-C exceptions). So I don't know why FF suddenly dies -- but I assume this behavior is somehow built in to Apple's JVM. So I'm not sure there's anything we can do about it. Still no hangs, by the way. And note that (as best I can tell from Safari's Console output) Java out-of-memory errors are also what stops Safari from being able to display the applet at http://www.vancouver2010.com/olympic-medals/geo-view/.
Timr and Tomcat: Do you see anything interesting in the Console or Java Console just before your freezes? ("Java Console.log" is a file written by the JEP. Its contents are rewritten with each new session (every time you restart Firefox). To open it, in the Console app choose File : Open.) How often do you see the freezes? (E.g. every time you try the STR?, one time in 10?) Are you sure you haven't left out steps in your descriptions?
Timr and Tomcat: Here's something you may not be aware of: The first time you load a JavaFX applet, the JavaFX infrastructure gets installed (by a Java signed applet). This can take a very long time (a minute or more). Near the end of the process you see a splash screen prompting you to allow JavaFX to be installed. Needless to say, any freezes you see before JavaFX has been installed don't count.
> Needless to say, any freezes you see before JavaFX has been > installed don't count. There's a better way to put this: Rapidly reloading the page (one containing a JavaFX applet) before JavaFX has itself finished installing isn't a fair test of any browser. And I haven't done this in any of my tests (of FF or Safari).
This is with MacOS 10.6.2, Firefox 3.5.7, Java 6u17, old plugin. Attached is the process sample when it hangs, and the Java stack trace when I send "kill - quit" to the hang firefox process. This is with loading the vancouver winter olympics FX applet: http://www.vancouver2010.com/olympic-medals/geo-view/ I can get it to hang pretty easily. Just try to load the above page and sometimes it hang right the way. Otherwise, reload the page a few times and it will hang too. Can you please take a look and see what's causing the hang ? thanks!
I've FINALLY managed to reproduce some hangs. It may not be too difficult to reproduce them once, accidentally. But it's definitely not easy to reproduce them consistently. Here, for the first time, are detailed, full and accurate steps to reproduce: 1) Load 50 tabs into each of two different Firefox windows (FF 3.5.7 or 3.6). The easiest way I found to do this is, in each window: a) Choose Bookmarks : Bookmarks Toolbar : Latest Headlines. b) Scroll down to the bottom of the menu and choose "Open All in Tabs". 2) Open another tab in one of the windows and visit http://www.vancouver2010.com/olympic-medals/geo-view/. Be sure to wait until the page (and its JavaFX applet) are fully loaded. You may be prompted to allow an applet 'from "dl.javafx.com"' to have access to your computer -- click on the Allow button. You may be prompted to install JavaFX -- say yes. 3) Repeatedly reload the page. (You can either click the Reload button or press command-r.) The timing is *very* difficult to get right. Reloading rapidly won't cause a hang. I've generally gotten best results by waiting until just before the applet is going to be reloaded, and clicking the Reload button another once or twice. Until you get the hang of it, it's probably best just to wait random lengths of time between clicking the Reload button (or pressing command-r). I've managed to reproduce hangs on the 1.9.1 and 1.9.2 branches (FF 3.5.X and FF 3.6) in gdb on OS X 10.6.2 and 10.5.8. I'll post logs in my next several comments.
Attachment #420631 - Attachment description: Gdb trace of 1.9.2-branch (FF 3.5.X) hang on OS X 10.5.8 → Gdb trace of 1.9.2-branch (FF 3.6) hang on OS X 10.5.8
There is Java level deadlock when hang happens ? Found one Java-level deadlock: 2010-01-07 11:42:07.759 firefox-bin[5493:b503] ============================= 2010-01-07 11:42:07.760 firefox-bin[5493:b503] 2010-01-07 11:42:07.760 firefox-bin[5493:b503] "AWT-EventQueue-13": 2010-01-07 11:42:07.760 firefox-bin[5493:b503] waiting to lock monitor 0x1e5a87b0 2010-01-07 11:42:07.761 firefox-bin[5493:b503] (object 0x26342bd0, a com.sun.embeddedswing.EmbeddedEventQueue) 2010-01-07 11:42:07.761 firefox-bin[5493:b503] , which is held by "AWT-EventQueue-12" 2010-01-07 11:42:07.762 firefox-bin[5493:b503] 2010-01-07 11:42:07.762 firefox-bin[5493:b503] "AWT-EventQueue-12": 2010-01-07 11:42:07.763 firefox-bin[5493:b503] waiting to lock monitor 0x1e5a9944 2010-01-07 11:42:07.763 firefox-bin[5493:b503] (object 0x262a1a28, a java.awt.EventQueue) 2010-01-07 11:42:07.763 firefox-bin[5493:b503] , which is held by "AWT-AppKit" 2010-01-07 11:42:07.764 firefox-bin[5493:b503] 2010-01-07 11:42:07.764 firefox-bin[5493:b503] "AWT-AppKit": 2010-01-07 11:42:07.765 firefox-bin[5493:b503] waiting to lock monitor 0x1e194cd4 2010-01-07 11:42:07.765 firefox-bin[5493:b503] (object 0x262a19f0, a jep.MySimpleEventQueue) 2010-01-07 11:42:07.766 firefox-bin[5493:b503] , which is held by "AWT-EventQueue-12" 2010-01-07 11:42:07.766 firefox-bin[5493:b503] 2010-01-07 11:42:07.766 firefox-bin[5493:b503] 2010-01-07 11:42:07.767 firefox-bin[5493:b503] Java stack information for the threads listed above: 2010-01-07 11:42:07.767 firefox-bin[5493:b503] =================================================== 2010-01-07 11:42:07.768 firefox-bin[5493:b503] "AWT-EventQueue-13": 2010-01-07 11:42:07.768 firefox-bin[5493:b503] at java.awt.EventQueue.getNextEvent(EventQueue.java:489) 2010-01-07 11:42:07.769 firefox-bin[5493:b503] - waiting to lock <0x26342bd0> 2010-01-07 11:42:07.769 firefox-bin[5493:b503] (a com.sun.embeddedswing.EmbeddedEventQueue) 2010-01-07 11:42:07.770 firefox-bin[5493:b503] at com.sun.embeddedswing.EmbeddedEventQueue.getNextEvent(Unknown Source) 2010-01-07 11:42:07.770 firefox-bin[5493:b503] at com.sun.embeddedswing.EmbeddedEventQueue.getNextEvent(Unknown Source) 2010-01-07 11:42:07.770 firefox-bin[5493:b503] at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:263) 2010-01-07 11:42:07.771 firefox-bin[5493:b503] at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211) 2010-01-07 11:42:07.771 firefox-bin[5493:b503] at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201) 2010-01-07 11:42:07.772 firefox-bin[5493:b503] at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196) 2010-01-07 11:42:07.772 firefox-bin[5493:b503] at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188) 2010-01-07 11:42:07.773 firefox-bin[5493:b503] at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 2010-01-07 11:42:07.773 firefox-bin[5493:b503] "AWT-EventQueue-12": 2010-01-07 11:42:07.773 firefox-bin[5493:b503] at java.awt.EventQueue.postEventPrivate(EventQueue.java:213) 2010-01-07 11:42:07.774 firefox-bin[5493:b503] - waiting to lock <0x262a1a28> 2010-01-07 11:42:07.774 firefox-bin[5493:b503] (a java.awt.EventQueue) 2010-01-07 11:42:07.775 firefox-bin[5493:b503] at java.awt.EventQueue.postEvent(EventQueue.java:198) 2010-01-07 11:42:07.775 firefox-bin[5493:b503] at sun.awt.PostEventQueue.flush(SunToolkit.java:2095) 2010-01-07 11:42:07.776 firefox-bin[5493:b503] - locked <0x26c3e548> 2010-01-07 11:42:07.776 firefox-bin[5493:b503] (a sun.awt.PostEventQueue) 2010-01-07 11:42:07.777 firefox-bin[5493:b503] at sun.awt.SunToolkit.flushPendingEvents(SunToolkit.java:611) 2010-01-07 11:42:07.777 firefox-bin[5493:b503] at java.awt.EventQueue.getNextEvent(EventQueue.java:488) 2010-01-07 11:42:07.778 firefox-bin[5493:b503] at java.awt.EventQueue.push(EventQueue.java:738) 2010-01-07 11:42:07.778 firefox-bin[5493:b503] - locked <0x26342bd0> 2010-01-07 11:42:07.779 firefox-bin[5493:b503] (a com.sun.embeddedswing.EmbeddedEventQueue) 2010-01-07 11:42:07.779 firefox-bin[5493:b503] - locked <0x262a19f0> 2010-01-07 11:42:07.780 firefox-bin[5493:b503] (a jep.MySimpleEventQueue) 2010-01-07 11:42:07.780 firefox-bin[5493:b503] at jep.MySimpleEventQueue.push(Unknown Source) 2010-01-07 11:42:07.780 firefox-bin[5493:b503] - locked <0x262a19f0> 2010-01-07 11:42:07.781 firefox-bin[5493:b503] (a jep.MySimpleEventQueue) 2010-01-07 11:42:07.781 firefox-bin[5493:b503] at com.sun.embeddedswing.EmbeddedEventQueue.register(Unknown Source) 2010-01-07 11:42:07.782 firefox-bin[5493:b503] at com.sun.embeddedswing.SwingGlueLayer$1.run(Unknown Source) 2010-01-07 11:42:07.782 firefox-bin[5493:b503] at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209) 2010-01-07 11:42:07.783 firefox-bin[5493:b503] at java.awt.EventQueue.dispatchEvent(EventQueue.java:633) 2010-01-07 11:42:07.783 firefox-bin[5493:b503] at jep.MySimpleEventQueue.dispatchEvent(Unknown Source) 2010-01-07 11:42:07.784 firefox-bin[5493:b503] at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296) 2010-01-07 11:42:07.784 firefox-bin[5493:b503] at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211) 2010-01-07 11:42:07.785 firefox-bin[5493:b503] at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201) 2010-01-07 11:42:07.785 firefox-bin[5493:b503] at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196) 2010-01-07 11:42:07.786 firefox-bin[5493:b503] at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188) 2010-01-07 11:42:07.786 firefox-bin[5493:b503] at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 2010-01-07 11:42:07.786 firefox-bin[5493:b503] "AWT-AppKit": 2010-01-07 11:42:07.787 firefox-bin[5493:b503] at java.awt.EventQueue.wakeup(EventQueue.java:1045) 2010-01-07 11:42:07.787 firefox-bin[5493:b503] - waiting to lock <0x262a19f0> 2010-01-07 11:42:07.788 firefox-bin[5493:b503] (a jep.MySimpleEventQueue) 2010-01-07 11:42:07.788 firefox-bin[5493:b503] at java.awt.EventQueue.wakeup(EventQueue.java:1047) 2010-01-07 11:42:07.789 firefox-bin[5493:b503] - locked <0x262a1a28> 2010-01-07 11:42:07.789 firefox-bin[5493:b503] (a java.awt.EventQueue) 2010-01-07 11:42:07.790 firefox-bin[5493:b503] at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source) 2010-01-07 11:42:07.790 firefox-bin[5493:b503] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 2010-01-07 11:42:07.791 firefox-bin[5493:b503] at java.lang.reflect.Method.invoke(Method.java:597) 2010-01-07 11:42:07.791 firefox-bin[5493:b503] at sun.awt.SunToolkit.wakeupEventQueue(SunToolkit.java:350) 2010-01-07 11:42:07.792 firefox-bin[5493:b503] at sun.awt.PostEventQueue.postEvent(SunToolkit.java:2116) 2010-01-07 11:42:07.792 firefox-bin[5493:b503] at sun.awt.SunToolkit.postEvent(SunToolkit.java:585) 2010-01-07 11:42:07.792 firefox-bin[5493:b503] at apple.awt.CComponent.postEvent(CComponent.java:261) 2010-01-07 11:42:07.793 firefox-bin[5493:b503] at apple.awt.ComponentModel.handlePaint(ComponentModel.java:335) 2010-01-07 11:42:07.793 firefox-bin[5493:b503] Found 1 deadlock. Any ideas ?
First off, it shouldn't be any surprise these hangs are caused by thread contention. But I *was* surprised to find two completely different kinds of thread contention on OS X 10.5.8 and 10.6.2. The 10.5.8 thread contention is actually due to a known bug in the JEP (bug 508315, https://sourceforge.net/support/tracker.php?aid=2832144). Java_JEPCookieHandler_getCookie and Java_apple_awt_ContainerModel__1endValidate are (presumably) both waiting for something to happen on the main thread, while the main thread is stuck waiting for the results of one or more of these calls. I've alleviated this problem in my current (testing) version of the JEP -- what will become JEP 0.9.7.3. But, though my patch does resolve the two (easily reproducible) testcases mentioned at https://sourceforge.net/support/tracker.php?aid=2832144 comment 10, it doesn't make this bug's hangs on OS X 10.5.8 go completely away. As best I can tell it does make them harder to reproduce ... but (as they're so difficult to reproduce consistently) it's really hard to be sure. The 10.6.2 thread contention is harder to figure out, and appears to be in Java code -- so it's easier to see in Thomas's log from comment #20: "AWT-EventQueue-12" and "AWT-EventQueue-13" have object <0x262a19f0> locked. But one or more of them is waiting on the main thread ("AWT-AppKit"), and the main thread is waiting to lock <0x262a19f0>. The hang is entirely in Sun/Apple code, so I'd guess this is a Sun or an Apple bug -- more likely an Apple bug, since it only happens on OS X 10.6.2. I've been unable to get the hangs to happen in Safari -- I'm not sure why. If Safari ran Java in a separate process (as I understand it does with other plugins on OS X 10.6.2), that would be the explanation. But I can't identify that process from the list of processes generated by 'ps ax'. Maybe the process is deliberately excluded from the 'ps ax' list, or maybe it's not there to be found.
I did some testing on OpenSolaris and I was able to produce some type of "hang" not sure if it is similar to the one you are seeing.A user tried to access the app at http://www.vancouver2010.com using Firefox 3.5.5 on Open Solaris Build 129. User had to restart browser to get it to work. This is similar to reload issue. Eventually it works. First Attempt -- spinning logo Second attempt -- did not work Third attempt worked and shift reload hung it up requiring browser to be restarted. Killing the java process allows the browser to work and the app comes up. Thanks to ray maslinski for finding this data point. java runtime goes to 90% of user cpu. We repeated this several times and it with the same result. This is a stack trace of the java process that causes the browser to hang. This could be a work around for savvy users so we don't kill their browser. Full thread dump Java HotSpot(TM) Client VM (14.3-b01 mixed mode): "Attach Listener" daemon prio=3 tid=0x08121400 nid=0x3b waiting on condition [0x00000000] java.lang.Thread.State: RUNNABLE "thread applet-null-2" prio=3 tid=0x08121c00 nid=0x3a in Object.wait() [0xc472e000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0xc6020f38> (a java.lang.Object) at java.lang.Object.wait(Object.java:485) at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1651) - locked <0xc6020f38> (a java.lang.Object) at java.lang.Thread.run(Thread.java:619) "Applet 7 LiveConnect Worker Thread" prio=3 tid=0x084c0400 nid=0x37 in Object.wait() [0xce12d000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0xc6022f28> (a java.lang.Object) at java.lang.Object.wait(Object.java:485) at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$LiveConnectWorker.run(LiveConnectSupport.java:1702) - locked <0xc6022f28> (a java.lang.Object) at java.lang.Thread.run(Thread.java:619) "AWT-EventQueue-4" prio=3 tid=0x089e9800 nid=0x33 in Object.wait() [0xc3ccb000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0xc6bc6b70> (a com.sun.embeddedswing.EmbeddedEventQueue) at java.lang.Object.wait(Object.java:485) at java.awt.EventQueue.getNextEvent(EventQueue.java:479) - locked <0xc6bc6b70> (a com.sun.embeddedswing.EmbeddedEventQueue) at com.sun.embeddedswing.EmbeddedEventQueue.getNextEvent(Unknown Source) at com.sun.embeddedswing.EmbeddedEventQueue.getNextEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:236) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) "pool-1-thread-1" daemon prio=3 tid=0x08702000 nid=0x31 waiting on condition [0xc3c29000] java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for <0xc6bc4860> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1925) at java.util.concurrent.DelayQueue.take(DelayQueue.java:160) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:583) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:576) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) at java.lang.Thread.run(Thread.java:619) "Long sleeping thread" daemon prio=3 tid=0x08700800 nid=0x30 waiting on condition [0xc3da5000] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method) at com.sun.scenario.animation.MasterTimer$LongSleepingThread.run(Unknown Source) "TimerQueue" daemon prio=3 tid=0x0857f800 nid=0x2a in Object.wait() [0xc5fad000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0xc6aea1a0> (a javax.swing.TimerQueue) at javax.swing.TimerQueue.run(TimerQueue.java:232) - locked <0xc6aea1a0> (a javax.swing.TimerQueue) at java.lang.Thread.run(Thread.java:619) "ConsoleWriterThread" daemon prio=3 tid=0x0855dc00 nid=0x29 in Object.wait() [0xc3ef2000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0xc65211e0> (a java.lang.Object) at java.lang.Object.wait(Object.java:485) at com.sun.deploy.util.ConsoleTraceListener$ConsoleWriterThread.run(ConsoleTraceListener.java:72) - locked <0xc65211e0> (a java.lang.Object) "TimerQueue" daemon prio=3 tid=0x08562000 nid=0x28 in Object.wait() [0xc3f43000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0xc6adfa78> (a javax.swing.TimerQueue) at javax.swing.TimerQueue.run(TimerQueue.java:232) - locked <0xc6adfa78> (a javax.swing.TimerQueue) at java.lang.Thread.run(Thread.java:619) "thread applet-com.sun.javafx.runtime.adapter.Applet-1" prio=3 tid=0x08323800 nid=0x23 in Object.wait() [0xc54ad000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0xc6555ee8> (a java.lang.Object) at java.lang.Object.wait(Object.java:485) at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1651) - locked <0xc6555ee8> (a java.lang.Object) at java.lang.Thread.run(Thread.java:619) "AWT-EventQueue-3" prio=3 tid=0x08260c00 nid=0x20 in Object.wait() [0xc529b000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0xc6521888> (a java.awt.EventQueue) at java.lang.Object.wait(Object.java:485) at java.awt.EventQueue.getNextEvent(EventQueue.java:479) - locked <0xc6521888> (a java.awt.EventQueue) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:236) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) "AWT-EventQueue-0" prio=3 tid=0x08253c00 nid=0x1f in Object.wait() [0xc52ec000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0xc6515f98> (a java.awt.EventQueue) at java.lang.Object.wait(Object.java:485) at java.awt.EventQueue.getNextEvent(EventQueue.java:479) - locked <0xc6515f98> (a java.awt.EventQueue) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:236) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) "AWT-Shutdown" prio=3 tid=0x08251c00 nid=0x1e in Object.wait() [0xc533d000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0xc64e4f98> (a java.lang.Object) at java.lang.Object.wait(Object.java:485) at sun.awt.AWTAutoShutdown.run(AWTAutoShutdown.java:259) - locked <0xc64e4f98> (a java.lang.Object) at java.lang.Thread.run(Thread.java:619) "AWT-XAWT" daemon prio=3 tid=0x08245800 nid=0x1c runnable [0xc538e000] java.lang.Thread.State: RUNNABLE at sun.awt.X11.XToolkit.waitForEvents(Native Method) at sun.awt.X11.XToolkit.run(XToolkit.java:548) at sun.awt.X11.XToolkit.run(XToolkit.java:523) at java.lang.Thread.run(Thread.java:619) "Applet 6 LiveConnect Worker Thread" prio=3 tid=0x08222c00 nid=0x1a in Object.wait() [0xce0dc000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0xc654bb80> (a java.lang.Object) at java.lang.Object.wait(Object.java:485) at sun.plugin2.main.client.LiveConnectSupport$PerAppletInfo$LiveConnectWorker.run(LiveConnectSupport.java:1702) - locked <0xc654bb80> (a java.lang.Object) at java.lang.Thread.run(Thread.java:619) "Browser Side Object Cleanup Thread" prio=3 tid=0x08220800 nid=0x17 in Object.wait() [0xc54fe000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0xc654bc08> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118) - locked <0xc654bc08> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134) at sun.plugin2.main.client.LiveConnectSupport$BrowserSideObjectCleanupThread.run(LiveConnectSupport.java:226) "Java2D Disposer" daemon prio=3 tid=0x08208800 nid=0x16 in Object.wait() [0xc557d000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0xc654bc90> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118) - locked <0xc654bc90> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134) at sun.java2d.Disposer.run(Disposer.java:125) at java.lang.Thread.run(Thread.java:619) "CacheCleanUpThread" daemon prio=3 tid=0x08206800 nid=0x15 in Object.wait() [0xc55ce000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0xc654bcb8> (a com.sun.deploy.cache.CleanupThread) at java.lang.Object.wait(Object.java:485) at com.sun.deploy.cache.CleanupThread.run(CleanupThread.java:220) - locked <0xc654bcb8> (a com.sun.deploy.cache.CleanupThread) "CacheMemoryCleanUpThread" daemon prio=3 tid=0x081dbc00 nid=0x14 in Object.wait() [0xc5d9e000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0xc6513530> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118) - locked <0xc6513530> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134) at com.sun.deploy.cache.MemoryCache$LoadedResourceCleanupThread.run(MemoryCache.java:219) "Java Plug-In Heartbeat Thread" prio=3 tid=0x081c8800 nid=0x10 waiting on condition [0xc5ffe000] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method) at sun.plugin2.main.client.PluginMain$HeartbeatThread.run(PluginMain.java:1591) "Java Plug-In Pipe Worker Thread (Client-Side)" daemon prio=3 tid=0x081b8400 nid=0xe runnable [0xce08b000] java.lang.Thread.State: RUNNABLE at com.sun.deploy.net.socket.UnixSocketImpl.unStreamSocketRead(Native Method) at com.sun.deploy.net.socket.UnixDomainSocket.read(UnixDomainSocket.java:444) at com.sun.deploy.net.socket.UnixDomainSocket.read(UnixDomainSocket.java:390) at sun.plugin2.ipc.unix.DomainSocketNamedPipe.read(DomainSocketNamedPipe.java:113) at sun.plugin2.message.transport.NamedPipeTransport$SerializerImpl.read(NamedPipeTransport.java:92) at sun.plugin2.message.transport.NamedPipeTransport$SerializerImpl.readByte(NamedPipeTransport.java:121) at sun.plugin2.message.AbstractSerializer.readInt(AbstractSerializer.java:162) at sun.plugin2.message.transport.SerializingTransport.read(SerializingTransport.java:97) at sun.plugin2.message.Pipe$WorkerThread.run(Pipe.java:181) "traceMsgQueueThread" daemon prio=3 tid=0x081b0000 nid=0xb in Object.wait() [0xce17e000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0xc6516ac0> (a java.util.ArrayList) at java.lang.Object.wait(Object.java:485) at com.sun.deploy.util.Trace$TraceMsgQueueChecker.run(Trace.java:79) - locked <0xc6516ac0> (a java.util.ArrayList) at java.lang.Thread.run(Thread.java:619) "Timer-0" prio=3 tid=0x081aac00 nid=0xa in Object.wait() [0xce26e000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0xc6513880> (a java.util.TaskQueue) at java.lang.Object.wait(Object.java:485) at java.util.TimerThread.mainLoop(Timer.java:483) - locked <0xc6513880> (a java.util.TaskQueue) at java.util.TimerThread.run(Timer.java:462) "Low Memory Detector" daemon prio=3 tid=0x08109c00 nid=0x8 runnable [0x00000000] java.lang.Thread.State: RUNNABLE "CompilerThread0" daemon prio=3 tid=0x08106000 nid=0x7 waiting on condition [0x00000000] java.lang.Thread.State: RUNNABLE "Signal Dispatcher" daemon prio=3 tid=0x08104800 nid=0x6 runnable [0x00000000] java.lang.Thread.State: RUNNABLE "Finalizer" daemon prio=3 tid=0x080f3400 nid=0x5 in Object.wait() [0xd04c3000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0xc6513a30> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118) - locked <0xc6513a30> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159) "Reference Handler" daemon prio=3 tid=0x080eec00 nid=0x4 in Object.wait() [0xd0514000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0xc65136f8> (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Object.java:485) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116) - locked <0xc65136f8> (a java.lang.ref.Reference$Lock) "main" prio=3 tid=0x08070000 nid=0x2 in Object.wait() [0xd0a7e000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0xc64eac70> (a sun.plugin2.message.Queue) at sun.plugin2.message.Queue.waitForMessage(Queue.java:61) - locked <0xc64eac70> (a sun.plugin2.message.Queue) at sun.plugin2.message.Pipe.receive(Pipe.java:94) at sun.plugin2.main.client.PluginMain.mainLoop(PluginMain.java:426) at sun.plugin2.main.client.PluginMain.run(PluginMain.java:313) at sun.plugin2.main.client.PluginMain.main(PluginMain.java:1876) "VM Thread" prio=3 tid=0x080ea800 nid=0x3 runnable "VM Periodic Task Thread" prio=3 tid=0x0810b400 nid=0x9 waiting on condition JNI global references: 1359
(In reply to comment #29) You're testing with a very different beast -- Java Plugin2 (which runs out of process), as opposed to the "old" Java plugin, which (except maybe in Safari) runs in process. And please, next time "attach" your log, rather than pasting it into a comment -- that makes the bug harder to read. Same goes for you, Thomas. I don't see contention between any of the threads in your log. But your STR sounds a lot like mine. And it's telling that killing the Java process got around the problem.
Here's the Java stack corresponding to the gdb stack in comment #24 (the 1.9.2-branch hang on OS X 10.5.8). It shows the Java equivalents of Java_JEPCookieHandler_getCookie and Java_apple_awt_ContainerModel__1endValidate.
Attachment #420646 - Attachment description: Java trace of 1.9.2-branch (FF 3.5.X) hang on OS X 10.5.8 → Java trace of 1.9.2-branch (FF 3.6) hang on OS X 10.5.8
Isn't the deadlock between Mozilla Java Embedding Plugin's "jep.MySimpleEventQueue" and the JavaFX com.sun.embeddedswing.EmbeddedEventQueue ? That's why Safari do not show this hang.
> Isn't the deadlock between Mozilla Java Embedding Plugin's > "jep.MySimpleEventQueue" and the JavaFX > com.sun.embeddedswing.EmbeddedEventQueue? No. The following snippet (from "AWT-EventQueue-12" or "AWT-EventQueue-13") doesn't show a deadlock. It just shows that each of these threads has "locked" the <0x262a19f0> object (a jep.MySimpleEventQueue object). The code that did the locking is a call to java.awt.EventQueue.push() (super.push() in the jep.MySimpleEventQueue.push() method). The "AWT-AppKit" thread is blocked (in the java.awt.EventQueue.wakeup() method) waiting for access to the <0x262a19f0> object. (a com.sun.embeddedswing.EmbeddedEventQueue) - locked <0x262a19f0> (a jep.MySimpleEventQueue) at jep.MySimpleEventQueue.push(Unknown Source) - locked <0x262a19f0>
With Mac OS X 10.5.8, FF 3.5.5, JRE 1.5.0_22, the deadlock involves only 2 threads: "AWT-EventQueue-9": at java.awt.EventQueue.postEventPrivate(EventQueue.java:190) - waiting to lock <0x22a44518> (a java.awt.EventQueue) which is locked by "AWT-AppKit" "AWT-AppKit": at java.awt.EventQueue.wakeup(EventQueue.java:865) - waiting to lock <0x22a41270> (a jep.MySimpleEventQueue) which is locked by "AWT-EventQueue-9"
(In reply to comment #34 and comment #35) Interesting. Your hang on OS X 10.5.8 is quite different from the hangs I saw (and reported in comment #23, comment #24 and comment #31 above). How, precisely, did you trigger the hang? And I do mean *precisely* :-)
(In reply to comment #36) I don't think I can precisely describe the steps to reproduce the hang. Just now, I saw the same hang again by: - start FF browser from command line /Applications/Firefox.app/Contents/MacOS/firefox-bin - visit the http://www.vancouver2010.com/olympic-medals - click on the "Geo View" tab in the web page Previous time (if I remember correctly) - same as above steps - plus refresh the applet couple of times - plus create a new browser tab without any applet
OK, thanks. I'm getting used to the fact that these crashes are pretty random. And I'll bet you have different extensions and plugins installed than I do. But one thing seems to be in common to all our hang logs -- apple.awt.ComponentModel.handlePaint seems to always be on the main thread's stack. I'm going to play with that (in JEP code), and see what I can make of it.
these crashes -> these hangs
> http://www.vancouver2010.com/olympic-medals The JavaFX applet on this page seems to have disappeared. It's the only one with which I've ever been able to reproduce this bug's hangs. Help!!!
Try http://www.vancouver2010.com/olympic-medals/geo-view/ It should be the same applet i believe.
(In reply to comment #41) OK, thanks. This is the same URL I cited in comment #10 and following. I was thrown by the wrong URL from comment #37 :-( Sigh.
Is the jep.MySimpleEventQueue of Firefox specific on MacOS only ? (I think so because on windows it uses Sun's plugin, correct ?) We would like to understand the purpose of the jep.MySimpleEventQueue, and see how can we workaround this problem from the FX side. (com.sun.embeddedswing.EmbeddedEventQueue)
> Is the jep.MySimpleEventQueue of Firefox specific on MacOS only? jep.MySimpleEventQueue is specific to the Java Embedding Plugin. The source code for the JEP is available at http://javaplugin.sourceforge.net/ (source and binaries are available in a single distro). Feel free to play around with it. Let me know if you come up with a way to work around these hangs. I will consider adding the change to my next release of the JEP. Be aware that you'll need an OS X 10.5.8 system to build/rebuild the JEP. It doesn't yet build on OS X 10.6. Last weekend I played around with my idea from comment #38, but haven't yet got anywhere with it. I'll try again next weekend. (I'm currently only able to work on the JEP in my spare time.)
http://people.mozilla.com/~stmichaud/JEP/JEP-0.9.7.3pre-2010-01-18.zip Here's a copy of my current (not yet released) version of the JEP, with the MySimpleEventQueue class disabled. The zipfile includes binaries of JavaEmbeddingPlugin.bundle and MRJPlugin.plugin, plus diff files showing the changes since JEP 0.9.7.2. You need to install both JavaEmbeddingPlugin.bundle and MRJPlugin.plugin together. I recommend copying them to your /Library/Internet Plug-Ins/ folder, then removing older copy(ies) of the JEP from your Mozilla.org browser(s). For more information see the JEP Readme (http://javaplugin.sourceforge.net/Readme.html). With this JEP "nightly" I no longer hang on OS X 10.6.2 -- but since I've always found these hangs very difficult to reproduce, I'm not sure how significant this is. I do still hang on OS X 10.5.8 -- but I see different hangs (several different ones). Thomas and other Sun people, please test with this JEP "nightly", and let us know your results. The more I work on this, the more I'm convinced these hangs are actually caused by one or more bugs in JavaFX itself. This would explain the results Rinaldo got in comment #29. I've tried my STR from comment #22 on several other very busy and slow-loading pages containing Java applets (sometimes quite a few of them). I'm not able to reproduce hangs on any of them, on OS X 10.6.2 or 10.5.8: http://brittnysseafood.com/ http://www.sferyx.com/htmleditorapplet/demo/htmleditordemo.php http://www.weather.gov/radar_tab.php (click on map and choose "loop") If this bug's hangs were caused by problems in the JEP, you think I'd be able to reproduce hangs with these sites.
Is the JavaFX source code available somewhere? If so, please post a URL. If not, please let us know why not.
JavaFX is not open source project and source code is not publicly available. However, problem can likely be reproduced with any app that does install own event queue (there are not many apps that do that though). Most of the applets do not do this unless they use some advanced framework, so testing pages with lots of or slow Java applets will not trigger this bug. The problem is triggered by presence of JEP. It is not in JEP per se, it is actually in JRE. On other hand there are too many versions of JREs that are vulnerable to this and workaround in JEP is needed. The problem itself is triggered by JEP's event queue. Normally, when additional event queue is installed events are first delivered to the "root" event queue (AWTEventQueue) and then passed through the chain of additional event queues installed. As part of this process each of queue object is locked. I.e. the sequence of locks is AWTEventQueue -> jep.MySimpleEventQueue When app tries to install own event queue (like JavaFX does) push operation behaves differently. First, it grabs lock on the last event queue in the chain and adds new queue as the child. Then it peeks all the pending events from the former "end" event queue and resubmits them. Resubmit will behave as it is described in previous paragraph. I.e. effectively lock order will be jep.MySimpleEventQueue -> AWTEventQueue This causes deadlocks people are observing. Real fix would be to fix this in the AWT (JRE) and this is done as part of OpenJDL and JDK7. However, until JDK7 is released and gain popularity people will suffer from this problem. So, if it is possible to eliminate JEP's event queue then it sounds like a good workaround. There are other problems with FF/Mac and JavaFX but these probably should be considered as part of other bugs (like setting cookie from Java may hang FF, crashes from time to time). Comment #29 is likely to be about other problem. Are JEP and SimpleEventQueue used by FF on OpenSolaris (or any other platform besides Mac)?
> When app tries to install own event queue (like JavaFX does) push > operation behaves differently. First, it grabs lock on the last > event queue in the chain and adds new queue as the child. Then it > peeks all the pending events from the former "end" event queue and > resubmits them. Resubmit will behave as it is described in previous > paragraph. I.e. effectively lock order will be > jep.MySimpleEventQueue -> AWTEventQueue Actually, I suspect it's the delay in handling events (while keeping event queues locked), as much as anything else, that triggers the hangs. So the more event queues get installed, the more likely you'll see hangs. > Real fix would be to fix this in the AWT (JRE) and this is done as > part of OpenJDL and JDK7. I'm looking forward to this becoming more widely available ... and (dare we hope?) available on OS X. > So, if it is possible to eliminate JEP's event queue then it sounds > like a good workaround. As it happens, the MySimpleEventQueue class is no longer really needed, so I'll plan to eliminate it in the next release (0.9.7.3) of the JEP. I doubt this will completely eliminate the hangs -- JavaFX will still be installing its own event queues. But there's reason to hope they'll occur less frequently (with JavaFX applets), at least on OS X 10.6.X.
I'm disappointed the source code for JavaFX isn't available. Sun blazed a trail by opening Java -- a large, commercial development environment that had previously been largely closed. Even under the restrictive licenses that were used prior to the OpenJDK (those that didn't allow you to change or fork the code), having the source code to refer to has been an enormously valuable resource. JavaFX clearly isn't just another signed Java applet -- it's in effect an extension of the Java development environment. So if it succeeds like Sun wants it to, Java will no longer be truly open. I hope Sun eventually changes its mind and open-sources JavaFX -- or at least makes its source code fully available under a restrictive license like that used for the Java 1.4, 5.0 and 6.0 source code.
>> When app tries to install own event queue (like JavaFX does) push >> operation behaves differently. First, it grabs lock on the last >> event queue in the chain and adds new queue as the child. Then it >> peeks all the pending events from the former "end" event queue and >> resubmits them. Resubmit will behave as it is described in previous >> paragraph. I.e. effectively lock order will be >> jep.MySimpleEventQueue -> AWTEventQueue > > Actually, I suspect it's the delay in handling events (while keeping > event queues locked), as much as anything else, that triggers the > hangs. So the more event queues get installed, the more likely you'll > see hangs. It is not about number of event queues. When events are processed they are passed along the list of event queues and locks are taken in the same order. So, there could be no deadlock. This problem happens only when new queue is being added as push operation attempt grabs lock in the different order. Timings are only relevant because there could be no pending events and in this case push may finish without deadlock. > I doubt this will completely eliminate the hangs -- JavaFX will still > be installing its own event queues. But there's reason to hope > they'll occur less frequently (with JavaFX applets), at least on OS X > 10.6.X. There should be no problem if there will be only one additional event queue (installed by JavaFX or other extension). Chain will consist of one element before new queue is pushed and order of locks is not important. 2 or more additional event queues will cause the problem.
(In reply to comment #50) Sounds plausible ... at least for the hangs Thomas and I saw on OS X 10.6. We'll see how it all plays out.
Tested JEP bundle from Steven: http://people.mozilla.com/~stmichaud/JEP/JEP-0.9.7.3pre-2010-01-18.zip Works great for me so far. I cannot reproduce any Firefox hang when loading JavaFX applets.
Depends on: 551327
I've just released a new version of the Java Embedding Plugin (0.9.7.3) that fixes this bug (by working around it). For more information see bug 551327.
JEP 0.9.7.3 has now landed on the 1.9.2 and 1.9.1 branches, and should be in tomorrow's Firefox 3.6.3pre and 3.1.10pre nightlies (at ftp://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/). Please test with them and let us know your results.
Status: NEW → RESOLVED
Closed: 15 years ago
Resolution: --- → FIXED
Can someone give an exact location and filename for the Firefox with this fix? The firefox-3.6.3pre.en-US.mac-shark.dmg from the latest-mozilla-1.9.2 folder couldn't be launched.
ftp://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-1.9.2/firefox-3.6.3pre.en-US.mac.dmg I've tried the above build but unfortunately I could still reproduce the hang. Steven, The above build was dated yesterday 4:24AM. Are you sure that build contains your fix? Comment #54 was entered yesterday around 3:53PM PT which was after the build.
Sigh. I guess you'll have to wait til tomorrow to test a FF 3.6.X/1.9.2-branch build. But the latest FF 3.5.X/1.9.1-branch nightly should bundle JEP 0.9.7.3.
My FF 3.6.3pre on Mac OS X 10.5.8 was auto updated today to the version dated 3/26/2010. I couldn't reproduce the hang so far. So it looks like the fix is working.
Component: Java Embedding Plugin → Java (Java Embedding Plugin)
Product: Core → Plugins
Product: Plugins → Plugins Graveyard
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: