Bug 1341283 - Avoid conflicts between GC zeal behavior and cooperative multithreading context switches, r=jonco.

This commit is contained in:
Brian Hackett 2017-02-22 05:22:47 -07:00
Родитель f5cdd08aab
Коммит 33310aacec
2 изменённых файлов: 11 добавлений и 1 удалений

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

@ -179,8 +179,13 @@ gc::GCRuntime::startVerifyPreBarriers()
if (verifyPreData || isIncrementalGCInProgress())
return;
if (IsIncrementalGCUnsafe(rt) != AbortReason::None || TlsContext.get()->keepAtoms || rt->hasHelperThreadZones())
if (IsIncrementalGCUnsafe(rt) != AbortReason::None ||
TlsContext.get()->keepAtoms ||
rt->hasHelperThreadZones() ||
rt->cooperatingContexts().length() != 1)
{
return;
}
number++;

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

@ -3600,6 +3600,11 @@ EvalInThread(JSContext* cx, unsigned argc, Value* vp, bool cooperative)
return false;
}
if (cooperative && !cx->runtime()->gc.canChangeActiveContext(cx)) {
JS_ReportErrorASCII(cx, "Cooperating multithreading context switches are not currently allowed");
return false;
}
if (!args[0].toString()->ensureLinear(cx))
return false;