mirror of
https://github.com/servo/servo.git
synced 2025-07-26 00:30:22 +01:00
Remove Untraceable from dedicatedglobalworkerscope.rs
This commit is contained in:
parent
63dd3070d1
commit
7defa5e941
3 changed files with 24 additions and 9 deletions
|
@ -41,6 +41,7 @@ use script_traits::ScriptControlChan;
|
||||||
use std::collections::hashmap::HashMap;
|
use std::collections::hashmap::HashMap;
|
||||||
use collections::hash::Hash;
|
use collections::hash::Hash;
|
||||||
use style::PropertyDeclarationBlock;
|
use style::PropertyDeclarationBlock;
|
||||||
|
use std::comm::{Receiver, Sender};
|
||||||
use string_cache::{Atom, Namespace};
|
use string_cache::{Atom, Namespace};
|
||||||
|
|
||||||
impl<T: Reflectable> JSTraceable for JS<T> {
|
impl<T: Reflectable> JSTraceable for JS<T> {
|
||||||
|
@ -238,3 +239,16 @@ impl<'a> JSTraceable for &'a str {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<T> JSTraceable for Sender<T> {
|
||||||
|
#[inline]
|
||||||
|
fn trace(&self, _: *mut JSTracer) {
|
||||||
|
// Do nothing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T> JSTraceable for Receiver<T> {
|
||||||
|
#[inline]
|
||||||
|
fn trace(&self, _: *mut JSTracer) {
|
||||||
|
// Do nothing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -9,7 +9,6 @@ use dom::bindings::codegen::InheritTypes::DedicatedWorkerGlobalScopeDerived;
|
||||||
use dom::bindings::codegen::InheritTypes::{EventTargetCast, WorkerGlobalScopeCast};
|
use dom::bindings::codegen::InheritTypes::{EventTargetCast, WorkerGlobalScopeCast};
|
||||||
use dom::bindings::global;
|
use dom::bindings::global;
|
||||||
use dom::bindings::js::{JSRef, Temporary, RootCollection};
|
use dom::bindings::js::{JSRef, Temporary, RootCollection};
|
||||||
use dom::bindings::trace::Untraceable;
|
|
||||||
use dom::bindings::utils::{Reflectable, Reflector};
|
use dom::bindings::utils::{Reflectable, Reflector};
|
||||||
use dom::eventtarget::{EventTarget, EventTargetHelpers};
|
use dom::eventtarget::{EventTarget, EventTargetHelpers};
|
||||||
use dom::eventtarget::WorkerGlobalScopeTypeId;
|
use dom::eventtarget::WorkerGlobalScopeTypeId;
|
||||||
|
@ -40,10 +39,10 @@ use url::Url;
|
||||||
#[must_root]
|
#[must_root]
|
||||||
pub struct DedicatedWorkerGlobalScope {
|
pub struct DedicatedWorkerGlobalScope {
|
||||||
workerglobalscope: WorkerGlobalScope,
|
workerglobalscope: WorkerGlobalScope,
|
||||||
receiver: Untraceable<Receiver<ScriptMsg>>,
|
receiver: Receiver<ScriptMsg>,
|
||||||
/// Sender to the parent thread.
|
/// Sender to the parent thread.
|
||||||
parent_sender: ScriptChan,
|
parent_sender: ScriptChan,
|
||||||
worker: Untraceable<TrustedWorkerAddress>,
|
worker: TrustedWorkerAddress,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl DedicatedWorkerGlobalScope {
|
impl DedicatedWorkerGlobalScope {
|
||||||
|
@ -59,9 +58,9 @@ impl DedicatedWorkerGlobalScope {
|
||||||
workerglobalscope: WorkerGlobalScope::new_inherited(
|
workerglobalscope: WorkerGlobalScope::new_inherited(
|
||||||
DedicatedGlobalScope, worker_url, cx, resource_task,
|
DedicatedGlobalScope, worker_url, cx, resource_task,
|
||||||
own_sender),
|
own_sender),
|
||||||
receiver: Untraceable::new(receiver),
|
receiver: receiver,
|
||||||
parent_sender: parent_sender,
|
parent_sender: parent_sender,
|
||||||
worker: Untraceable::new(worker),
|
worker: worker,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -120,7 +119,7 @@ impl DedicatedWorkerGlobalScope {
|
||||||
let target: JSRef<EventTarget> =
|
let target: JSRef<EventTarget> =
|
||||||
EventTargetCast::from_ref(*global);
|
EventTargetCast::from_ref(*global);
|
||||||
loop {
|
loop {
|
||||||
match global.receiver.deref().recv_opt() {
|
match global.receiver.recv_opt() {
|
||||||
Ok(DOMMessage(data, nbytes)) => {
|
Ok(DOMMessage(data, nbytes)) => {
|
||||||
let mut message = UndefinedValue();
|
let mut message = UndefinedValue();
|
||||||
unsafe {
|
unsafe {
|
||||||
|
@ -160,7 +159,7 @@ impl<'a> DedicatedWorkerGlobalScopeMethods for JSRef<'a, DedicatedWorkerGlobalSc
|
||||||
}
|
}
|
||||||
|
|
||||||
let ScriptChan(ref sender) = self.parent_sender;
|
let ScriptChan(ref sender) = self.parent_sender;
|
||||||
sender.send(WorkerPostMessage(*self.worker, data, nbytes));
|
sender.send(WorkerPostMessage(self.worker, data, nbytes));
|
||||||
}
|
}
|
||||||
|
|
||||||
fn GetOnmessage(self) -> Option<EventHandlerNonNull> {
|
fn GetOnmessage(self) -> Option<EventHandlerNonNull> {
|
||||||
|
@ -181,7 +180,7 @@ trait PrivateDedicatedWorkerGlobalScopeHelpers {
|
||||||
impl<'a> PrivateDedicatedWorkerGlobalScopeHelpers for JSRef<'a, DedicatedWorkerGlobalScope> {
|
impl<'a> PrivateDedicatedWorkerGlobalScopeHelpers for JSRef<'a, DedicatedWorkerGlobalScope> {
|
||||||
fn delayed_release_worker(self) {
|
fn delayed_release_worker(self) {
|
||||||
let ScriptChan(ref sender) = self.parent_sender;
|
let ScriptChan(ref sender) = self.parent_sender;
|
||||||
sender.send(WorkerRelease(*self.worker));
|
sender.send(WorkerRelease(self.worker));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@ use dom::bindings::codegen::InheritTypes::EventTargetCast;
|
||||||
use dom::bindings::error::{Fallible, Syntax};
|
use dom::bindings::error::{Fallible, Syntax};
|
||||||
use dom::bindings::global::{GlobalRef, GlobalField};
|
use dom::bindings::global::{GlobalRef, GlobalField};
|
||||||
use dom::bindings::js::{JS, JSRef, Temporary};
|
use dom::bindings::js::{JS, JSRef, Temporary};
|
||||||
|
use dom::bindings::trace::JSTraceable;
|
||||||
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
|
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
|
||||||
use dom::dedicatedworkerglobalscope::DedicatedWorkerGlobalScope;
|
use dom::dedicatedworkerglobalscope::DedicatedWorkerGlobalScope;
|
||||||
use dom::eventtarget::{EventTarget, EventTargetHelpers, WorkerTypeId};
|
use dom::eventtarget::{EventTarget, EventTargetHelpers, WorkerTypeId};
|
||||||
|
@ -18,7 +19,7 @@ use script_task::{ScriptChan, DOMMessage};
|
||||||
use servo_util::str::DOMString;
|
use servo_util::str::DOMString;
|
||||||
|
|
||||||
use js::glue::JS_STRUCTURED_CLONE_VERSION;
|
use js::glue::JS_STRUCTURED_CLONE_VERSION;
|
||||||
use js::jsapi::{JSContext, JS_AddObjectRoot, JS_RemoveObjectRoot};
|
use js::jsapi::{JSContext, JS_AddObjectRoot, JS_RemoveObjectRoot, JSTracer};
|
||||||
use js::jsapi::{JS_ReadStructuredClone, JS_WriteStructuredClone};
|
use js::jsapi::{JS_ReadStructuredClone, JS_WriteStructuredClone};
|
||||||
use js::jsval::{JSVal, UndefinedValue};
|
use js::jsval::{JSVal, UndefinedValue};
|
||||||
use url::UrlParser;
|
use url::UrlParser;
|
||||||
|
@ -28,6 +29,7 @@ use std::cell::Cell;
|
||||||
use std::ptr;
|
use std::ptr;
|
||||||
|
|
||||||
pub struct TrustedWorkerAddress(pub *const c_void);
|
pub struct TrustedWorkerAddress(pub *const c_void);
|
||||||
|
untraceable!(TrustedWorkerAddress)
|
||||||
|
|
||||||
#[jstraceable]
|
#[jstraceable]
|
||||||
#[must_root]
|
#[must_root]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue