mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-14 20:22:00 +00:00
Fix for 67503. Setting File object explicitly and using JS_BeginRequest-JS_EndRequest correctly. r=sgehani, sr=brendan
This commit is contained in:
parent
5ea9793996
commit
cdeac72eec
@ -62,8 +62,7 @@ enum Install_slots
|
|||||||
INSTALL_FLAGS = -7,
|
INSTALL_FLAGS = -7,
|
||||||
INSTALL_STATUSSENT = -8,
|
INSTALL_STATUSSENT = -8,
|
||||||
INSTALL_INSTALL = -9,
|
INSTALL_INSTALL = -9,
|
||||||
INSTALL_FILEOP = -10,
|
INSTALL_INSTALLED_FILES = -10
|
||||||
INSTALL_INSTALLED_FILES = -11
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// prototype for fileOp object
|
// prototype for fileOp object
|
||||||
@ -156,10 +155,6 @@ GetInstallProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
|
|||||||
*vp = OBJECT_TO_JSVAL(obj);
|
*vp = OBJECT_TO_JSVAL(obj);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case INSTALL_FILEOP:
|
|
||||||
*vp = OBJECT_TO_JSVAL(gFileOpObject);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case INSTALL_INSTALLED_FILES:
|
case INSTALL_INSTALLED_FILES:
|
||||||
*vp = BOOLEAN_TO_JSVAL( a->InInstallTransaction() );
|
*vp = BOOLEAN_TO_JSVAL( a->InInstallTransaction() );
|
||||||
break;
|
break;
|
||||||
@ -836,12 +831,13 @@ InstallFinalizeInstall(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, js
|
|||||||
|
|
||||||
if(argc >= 0)
|
if(argc >= 0)
|
||||||
{
|
{
|
||||||
|
jsrefcount saveDepth;
|
||||||
|
saveDepth = JS_SuspendRequest(cx);//Need to suspend use of thread or deadlock occurs
|
||||||
// public int FinalizeInstall (void);
|
// public int FinalizeInstall (void);
|
||||||
|
nsresult rv = nativeThis->FinalizeInstall(&nativeRet);
|
||||||
if(NS_OK != nativeThis->FinalizeInstall(&nativeRet))
|
JS_ResumeRequest(cx, saveDepth);
|
||||||
{
|
if (NS_FAILED(rv))
|
||||||
return JS_FALSE;
|
return JS_FALSE;
|
||||||
}
|
|
||||||
|
|
||||||
*rval = INT_TO_JSVAL(nativeRet);
|
*rval = INT_TO_JSVAL(nativeRet);
|
||||||
}
|
}
|
||||||
@ -1499,12 +1495,17 @@ InstallStartInstall(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval
|
|||||||
ConvertJSValToStr(b1, cx, argv[1]);
|
ConvertJSValToStr(b1, cx, argv[1]);
|
||||||
ConvertJSvalToVersionString(b2, cx, argv[2]);
|
ConvertJSvalToVersionString(b2, cx, argv[2]);
|
||||||
|
|
||||||
if(NS_OK != nativeThis->StartInstall(b0, b1, b2, &nativeRet))
|
jsrefcount saveDepth;
|
||||||
|
saveDepth = JS_SuspendRequest(cx);//Need to suspend use of thread or deadlock occurs
|
||||||
|
|
||||||
|
nsresult rv = nativeThis->StartInstall(b0, b1, b2, &nativeRet);
|
||||||
|
|
||||||
|
JS_ResumeRequest(cx, saveDepth); //Resume the suspened thread
|
||||||
|
if (NS_FAILED(rv))
|
||||||
{
|
{
|
||||||
return JS_FALSE;
|
return JS_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
*rval = INT_TO_JSVAL(nativeRet);
|
*rval = INT_TO_JSVAL(nativeRet);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1713,7 +1714,6 @@ static JSPropertySpec InstallProperties[] =
|
|||||||
{"flags", INSTALL_FLAGS, JSPROP_ENUMERATE | JSPROP_READONLY},
|
{"flags", INSTALL_FLAGS, JSPROP_ENUMERATE | JSPROP_READONLY},
|
||||||
{"_statusSent", INSTALL_STATUSSENT, JSPROP_READONLY},
|
{"_statusSent", INSTALL_STATUSSENT, JSPROP_READONLY},
|
||||||
{"Install", INSTALL_INSTALL, JSPROP_READONLY},
|
{"Install", INSTALL_INSTALL, JSPROP_READONLY},
|
||||||
{"File", INSTALL_FILEOP, JSPROP_READONLY},
|
|
||||||
{"_installedFiles", INSTALL_INSTALLED_FILES, JSPROP_READONLY},
|
{"_installedFiles", INSTALL_INSTALLED_FILES, JSPROP_READONLY},
|
||||||
{0}
|
{0}
|
||||||
};
|
};
|
||||||
@ -1918,6 +1918,9 @@ JSObject * InitXPInstallObjects(JSContext *jscontext,
|
|||||||
return nsnull;
|
return nsnull;
|
||||||
|
|
||||||
JS_SetPrivate(jscontext, gFileOpObject, nativeInstallObject);
|
JS_SetPrivate(jscontext, gFileOpObject, nativeInstallObject);
|
||||||
|
|
||||||
|
JS_DefineProperty (jscontext, installObject, "File", OBJECT_TO_JSVAL(gFileOpObject),
|
||||||
|
JS_PropertyStub, JS_PropertyStub, JSPROP_READONLY | JSPROP_PERMANENT);
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -1942,7 +1945,7 @@ JSObject * InitXPInstallObjects(JSContext *jscontext,
|
|||||||
}
|
}
|
||||||
nativeInstallObject->SaveWinRegPrototype(winRegPrototype);
|
nativeInstallObject->SaveWinRegPrototype(winRegPrototype);
|
||||||
|
|
||||||
if(NS_OK != InitWinProfilePrototype(jscontext, global, &winRegPrototype))
|
if(NS_OK != InitWinProfilePrototype(jscontext, global, &winProfilePrototype))
|
||||||
{
|
{
|
||||||
return nsnull;
|
return nsnull;
|
||||||
}
|
}
|
||||||
|
@ -427,7 +427,8 @@ extern "C" void RunInstallOnThread(void *data)
|
|||||||
// Go ahead and run!!
|
// Go ahead and run!!
|
||||||
jsval rval;
|
jsval rval;
|
||||||
jsval installedFiles;
|
jsval installedFiles;
|
||||||
|
JS_BeginRequest(cx); //Increment JS thread counter associated
|
||||||
|
//with this context
|
||||||
PRBool ok = JS_EvaluateScript( cx,
|
PRBool ok = JS_EvaluateScript( cx,
|
||||||
glob,
|
glob,
|
||||||
scriptBuffer,
|
scriptBuffer,
|
||||||
@ -470,7 +471,7 @@ extern "C" void RunInstallOnThread(void *data)
|
|||||||
else
|
else
|
||||||
finalStatus = nsInstall::MALFORMED_INSTALL;
|
finalStatus = nsInstall::MALFORMED_INSTALL;
|
||||||
}
|
}
|
||||||
|
JS_EndRequest(cx); //Decrement JS thread counter
|
||||||
JS_DestroyContextMaybeGC(cx);
|
JS_DestroyContextMaybeGC(cx);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
Loading…
x
Reference in New Issue
Block a user