Closed Bug 185360 Opened 22 years ago Closed 20 years ago

uncaught exception calling goQuitApplication() [nsIAppShellService.quit]

Categories

(Core :: XUL, defect)

x86
All
defect
Not set
minor

Tracking

()

RESOLVED FIXED
mozilla1.7beta

People

(Reporter: nate, Assigned: danm.moz)

Details

Attachments

(1 file)

User-Agent:       Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.3a) Gecko/20021207 Phoenix/0.5
Build Identifier: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.3a) Gecko/20021207 Phoenix/0.5

When I call goQuitApplication() (xpfe/global/resources/content/globalOverlay.js) 

JavaScript error: 
 line 0: uncaught exception: [Exception... "Component returned failure code:
0x80004005 (NS_ERROR_FAILURE) [nsIAppShellService.quit]"  nsresult: "0x80004005
(NS_ERROR_FAILURE)"  location: "JS frame ::
chrome://global/content/globalOverlay.js :: goQuitApplication :: line 38"  data: no]

This caused by line 576 in xpfe/appshell/src/nsAppShellService.cpp.  All windows
have not yet closed, so NS_ERROR_FAILURE is returned.  Either this should be
changed to an NS_SUCCESS, or goQuitApplication() should catch this exception.



Reproducible: Always

Steps to Reproduce:
danm's most likely to confirm this bug.

/be
Assignee: hyatt → danm
i usually get this if i play poorly w/ venkman, i haven't gotten it since my
travels, but i've been poking other parts of venkman instead.
I can see this with a 2004-01-12 CVS trunk debug build on Win2k; the actual line
has changed, though:

JavaScript error:
 line 0: uncaught exception: [Exception... "Component returned failure code:
0x80004005 (NS_ERROR_FAILURE) [nsIAppShellService.quit]"  nsresult: "0x800040
05 (NS_ERROR_FAILURE)"  location: "JS frame
::chrome://global/content/globalOverlay.js :: goQuitApplication :: line 40" 
data: no]

It comes after
   WEBSHELL+ = 4
but before
   nsPluginHostImpl::Observe "quit-application"

I get this error *only* when closing Mozilla via CTRL-Q and *not* when closing
via the window's upper right [x] button.
Status: UNCONFIRMED → NEW
Ever confirmed: true
OS: Linux → All
Yes, an attempt to quit doesn't necessarily succeed immediately even if it does
set into motion things that will make the app quit soon. It's likely the DOM
window will stumble on until the next JS garbage collection cycle. That's
happening here, attempting to quit the app using a command handler.

Still, I could have done this better. This patch makes appshellservice::quit
return no error unless something really has gone awry. It will inaccurately
claim success if, say, you try to quit the app with an open window containing
an unload handler that opens a new window (and popup controls disabled). But no
caller of Quit cares about such hair splitting, so I claim this is fine.
I applied the patch to my tree and did a clean rebuild of /xpfe, but that didn't
change anything wrt the JS error...
That's odd. I get an error that looks just like the one you describe in comment
3 if I revert my change*. After reapplying my patch the log is identical except
that error is missing. What are you doing? I'm launching a Windows Seamonkey
debug build and hitting ^Q a moment after the first browser window appears. (And
I get the same results of I first open a second browser, or the mail window.)
NB: you need rebuild only xpfe/appshell/src.

* though, also odd, my webshell count never reaches 4; i get only 3.
I CVS-updated and rebuild my whole trunk build yesterday with your patch
included and now the exception is gone! :)

(Seems as if just building xpfe did not suffice - but a complete build takes
about 2,5 hours on my slow machine, so I avoid it whenever possible.)

The difference in webshell counting is due to my -mail when starting Seamonkey.
Time to get r/sr, I guess! ;-)
Have similar error when quitting mozilla-1.6 release on Tru64Unix 5.1A:

JavaScript error: 
 line 0: uncaught exception: [Exception... "Component returned failure code:
0x80004005 (NS_ERROR_FAILURE) [nsIAppShellService.quit]"  nsresult: "0x80004005
(NS_ERROR_FAILURE)"  location: "JS frame ::
chrome://global/content/globalOverlay.js :: goQuitApplication :: line 40"  data: no]

GetPrimaryFrameFor() called while FrameManager is being destroyed!
WARNING: NS_ENSURE_TRUE(presContext) failed, file nsGenericHTMLElement.cpp, line
4303
WARNING: NS_ENSURE_TRUE(presContext) failed, file nsGenericHTMLElement.cpp, line
4303
nsPluginHostImpl::Observe "quit-application"
WARNING: requested removal of nonexistent window
, file nsWindowWatcher.cpp, line 945
WEBSHELL- = 2
WEBSHELL- = 1
WEBSHELL- = 0
nsPluginHostImpl::Observe "xpcom-shutdown"
WARNING: nsExceptionService ignoring thread destruction after shutdown, file
nsExceptionService.cpp, line 189
+++ JavaScript debugging hooks removed.
nsPluginHostImpl dtor
GC Cache:
        hits:  869  284  181   57   15    1    4    0    1   10
        hits: 1422, misses: 352, hit percent: 80.157837%
I tried latest cvs (Mozilla/5.0 (X11; U; OSF1 alpha; en-US; rv:1.7a)
Gecko/20040201) on Tru64Unix and am still getting this error:

JavaScript error: 
 line 0: uncaught exception: [Exception... "Component returned failure code:
0x80004005 (NS_ERROR_FAILURE) [nsIAppShellService.quit]"  nsresult: "0x80004005
(NS_ERROR_FAILURE)"  location: "JS frame ::
chrome://global/content/globalOverlay.js :: goQuitApplication :: line 40"  data: no]

GetPrimaryFrameFor() called while FrameManager is being destroyed!
--WEBSHELL == 2
nsPluginHostImpl::Observe "quit-application"
WARNING: requested removal of nonexistent window
, file nsWindowWatcher.cpp, line 945
--WEBSHELL == 1
--WEBSHELL == 0
nsPluginHostImpl::Observe "xpcom-shutdown"
--DOMWINDOW == 2
WARNING: nsExceptionService ignoring thread destruction after shutdown, file
nsExceptionService.cpp, line 191
--DOMWINDOW == 1
--DOMWINDOW == 0
+++ JavaScript debugging hooks removed.
nsPluginHostImpl dtor
GC Cache:
        hits: 1254  290  184  579   50   37   34   59   22    9
        hits: 2518, misses: 825, hit percent: 75.321564%

Hmm, I thought you patch is already in public cvs. After manully patching my cvs
copy I can confirm the uncaught exception messages disappeared.
Attachment #139852 - Flags: superreview?(jag)
Attachment #139852 - Flags: review?(blake)
Comment on attachment 139852 [details] [diff] [review]
appshellservice::quit returns no error under normal circumstances

So you changed the check from "do I still have any DOM windows?" to "do I still
have any non-closed DOM windows?". Works for me.

If we ever start doing things like unloading critical DLLs that won't
automatically get re-loaded when a popup opens from onunload, then we can worry
about making the check here more pedantic.

sr=jag
Attachment #139852 - Flags: superreview?(jag) → superreview+
Attachment #139852 - Flags: review?(blake) → review?(neil.parkwaycc.co.uk)
Comment on attachment 139852 [details] [diff] [review]
appshellservice::quit returns no error under normal circumstances

>-          if (NS_SUCCEEDED(windowEnumerator->HasMoreElements(&more)) && more) {
>+          while (windowEnumerator->HasMoreElements(&more), more) {
I supposed this change is safe.
Attachment #139852 - Flags: review?(neil.parkwaycc.co.uk) → review+
Overall this change is little less benign than a spelling change. About that
particular line; I've noticed I get hairy palms from slavishly heeding the
&#%#)*# error return under all circumstances. I find it no more dangerous but
considerably more aesthetically pleasing in this form, so thanks for seeing it
on its way. Checked in to 1.7b.
Status: NEW → RESOLVED
Closed: 20 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla1.7beta
Component: XP Toolkit/Widgets: XUL → XUL
QA Contact: shrir → xptoolkit.widgets
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: