Fix for 67503. Setting File object explicitly and using JS_BeginRequest-JS_EndRequest correctly. r=sgehani, sr=brendan

This commit is contained in:
dbragg%netscape.com 2001-04-06 04:18:11 +00:00
parent 5ea9793996
commit cdeac72eec
2 changed files with 21 additions and 17 deletions

View File

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

View File

@ -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