From 9457ffb6fbfc11dc9beb44eb639b5ca856fac729 Mon Sep 17 00:00:00 2001 From: "reed%reedloden.com" Date: Wed, 20 Feb 2008 10:02:04 +0000 Subject: [PATCH] Bug 403574 - ""ASSERTION: Infinite loop! Calling EnsureScriptEnvironment() from within EnsureScriptEnvironment()!" with XBL, " [p=jst@mozilla.org (Johnny Stenback [jst]) r+sr=bzbarsky (DEBUG builds only)] git-svn-id: svn://10.0.0.236/trunk@246063 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/docshell/base/nsDocShell.cpp | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/mozilla/docshell/base/nsDocShell.cpp b/mozilla/docshell/base/nsDocShell.cpp index d7b2033e960..107e5c68c11 100644 --- a/mozilla/docshell/base/nsDocShell.cpp +++ b/mozilla/docshell/base/nsDocShell.cpp @@ -8786,6 +8786,25 @@ nsDocShell::GetRootScrollableView(nsIScrollableView ** aOutScrollView) return NS_OK; } +#ifdef DEBUG +class nsDebugAutoBoolTrueSetter +{ +public: + nsDebugAutoBoolTrueSetter(PRBool *aBool) + : mBool(aBool) + { + *mBool = PR_TRUE; + } + + ~nsDebugAutoBoolTrueSetter() + { + *mBool = PR_FALSE; + } +protected: + PRBool *mBool; +}; +#endif + NS_IMETHODIMP nsDocShell::EnsureScriptEnvironment() { @@ -8803,7 +8822,7 @@ nsDocShell::EnsureScriptEnvironment() // Yeah, this isn't re-entrant safe, but that's ok since if we // re-enter this method, we'll infinitely loop... - mInEnsureScriptEnv = PR_TRUE; + nsDebugAutoBoolTrueSetter boolSetter(&mInEnsureScriptEnv); #endif nsCOMPtr factory = @@ -8837,10 +8856,6 @@ nsDocShell::EnsureScriptEnvironment() rv = mScriptGlobal->EnsureScriptEnvironment(nsIProgrammingLanguage::JAVASCRIPT); NS_ENSURE_SUCCESS(rv, rv); -#ifdef DEBUG - mInEnsureScriptEnv = PR_FALSE; -#endif - return NS_OK; }