Bug 403574 - ""ASSERTION: Infinite loop! Calling EnsureScriptEnvironment() from within EnsureScriptEnvironment()!" with XBL, <frame>" [p=jst@mozilla.org (Johnny Stenback [jst]) r+sr=bzbarsky (DEBUG builds only)]

This commit is contained in:
reed@reedloden.com 2008-02-20 02:02:04 -08:00
Родитель 7299e4b4e0
Коммит 8569534550
1 изменённых файлов: 20 добавлений и 5 удалений

Просмотреть файл

@ -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<nsIDOMScriptObjectFactory> 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;
}