Bug 973571 - Do not allow gcparam to set the mark stack limit while a gc is in progress; r=billm

--HG--
extra : rebase_source : 620edcc859a86d8cb6e7d525de4079238a89a07e
This commit is contained in:
Terrence Cole 2014-03-09 15:02:41 -07:00
parent d9090c7201
commit 0026cbdb16

View File

@ -271,7 +271,7 @@ static const struct ParamPair {
// Keep this in sync with above params. // Keep this in sync with above params.
#define GC_PARAMETER_ARGS_LIST "maxBytes, maxMallocBytes, gcBytes, gcNumber, sliceTimeBudget, or markStackLimit" #define GC_PARAMETER_ARGS_LIST "maxBytes, maxMallocBytes, gcBytes, gcNumber, sliceTimeBudget, or markStackLimit"
static bool static bool
GCParameter(JSContext *cx, unsigned argc, Value *vp) GCParameter(JSContext *cx, unsigned argc, Value *vp)
{ {
@ -320,6 +320,11 @@ GCParameter(JSContext *cx, unsigned argc, Value *vp)
return false; return false;
} }
if (param == JSGC_MARK_STACK_LIMIT && IsIncrementalGCInProgress(cx->runtime())) {
JS_ReportError(cx, "attempt to set markStackLimit while a GC is in progress");
return false;
}
if (param == JSGC_MAX_BYTES) { if (param == JSGC_MAX_BYTES) {
uint32_t gcBytes = JS_GetGCParameter(cx->runtime(), JSGC_BYTES); uint32_t gcBytes = JS_GetGCParameter(cx->runtime(), JSGC_BYTES);
if (value < gcBytes) { if (value < gcBytes) {