mirror of
https://github.com/servo/servo.git
synced 2025-07-23 07:13:52 +01:00
Auto merge of #26056 - gterzian:enable_atomics_wait_on_dedicated_worker, r=jdm
Enable Atomics.wait in a dedicated worker agent <!-- Please describe your changes on the following line: --> FIX #25191 --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `___` with appropriate data: --> - [ ] `./mach build -d` does not report any errors - [ ] `./mach test-tidy` does not report any errors - [ ] These changes fix #___ (GitHub issue number if applicable) <!-- Either: --> - [ ] There are tests for these changes OR - [ ] These changes do not require tests because ___ <!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.--> <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
This commit is contained in:
commit
fd6f9140f7
2 changed files with 15 additions and 10 deletions
|
@ -45,6 +45,7 @@ use js::jsapi::ContextOptionsRef;
|
||||||
use js::jsapi::GetPromiseUserInputEventHandlingState;
|
use js::jsapi::GetPromiseUserInputEventHandlingState;
|
||||||
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::PromiseUserInputEventHandlingState;
|
use js::jsapi::PromiseUserInputEventHandlingState;
|
||||||
use js::jsapi::StreamConsumer as JSStreamConsumer;
|
use js::jsapi::StreamConsumer as JSStreamConsumer;
|
||||||
|
@ -454,12 +455,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());
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue