enable Atomics.wait in a dedicated worker agent

This commit is contained in:
Gregory Terzian 2020-03-30 14:35:37 +08:00
parent 67b433648c
commit 3ce6109836
2 changed files with 15 additions and 10 deletions

View file

@ -44,6 +44,7 @@ use js::glue::{
use js::jsapi::ContextOptionsRef; use js::jsapi::ContextOptionsRef;
use js::jsapi::InitConsumeStreamCallback; use js::jsapi::InitConsumeStreamCallback;
use js::jsapi::InitDispatchToEventLoop; use js::jsapi::InitDispatchToEventLoop;
use js::jsapi::JS_SetFutexCanWait;
use js::jsapi::MimeType; use js::jsapi::MimeType;
use js::jsapi::StreamConsumer as JSStreamConsumer; use js::jsapi::StreamConsumer as JSStreamConsumer;
use js::jsapi::{BuildIdCharVector, DisableIncrementalGC, GCDescription, GCProgress}; use js::jsapi::{BuildIdCharVector, DisableIncrementalGC, GCDescription, GCProgress};
@ -444,12 +445,22 @@ unsafe fn new_rt_and_cx_with_parent(
networking_task_source: Option<NetworkingTaskSource>, networking_task_source: Option<NetworkingTaskSource>,
) -> Runtime { ) -> Runtime {
LiveDOMReferences::initialize(); LiveDOMReferences::initialize();
let runtime = if let Some(parent) = parent { let (cx, runtime) = if let Some(parent) = parent {
RustRuntime::create_with_parent(parent) let runtime = RustRuntime::create_with_parent(parent);
let cx = runtime.cx();
// Note: this enables blocking on an Atomics.wait,
// which should only be enabled for an agent whose [[CanBlock]] is true.
// Currently only a dedicated worker agent uses a parent,
// and this agent can block.
// See https://html.spec.whatwg.org/multipage/#integration-with-the-javascript-agent-cluster-formalism
JS_SetFutexCanWait(cx);
(cx, runtime)
} else { } else {
RustRuntime::new(JS_ENGINE.lock().unwrap().as_ref().unwrap().clone()) let runtime = RustRuntime::new(JS_ENGINE.lock().unwrap().as_ref().unwrap().clone());
(runtime.cx(), runtime)
}; };
let cx = runtime.cx();
JS_AddExtraGCRootsTracer(cx, Some(trace_rust_roots), ptr::null_mut()); JS_AddExtraGCRootsTracer(cx, Some(trace_rust_roots), ptr::null_mut());

View file

@ -1,10 +1,4 @@
[requires-success.any.worker.html]
[[[CanBlock\]\] in a DedicatedWorkerGlobalScope]
expected: FAIL
[requires-success.any.sharedworker.html] [requires-success.any.sharedworker.html]
expected: ERROR expected: ERROR
[requires-success] [requires-success]
expected: FAIL expected: FAIL