Remove Untraceable from dedicatedglobalworkerscope.rs

This commit is contained in:
Manish Goregaokar 2014-09-29 03:34:52 +05:30
parent 63dd3070d1
commit 7defa5e941
3 changed files with 24 additions and 9 deletions

View file

@ -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
}
}

View file

@ -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));
} }
} }

View file

@ -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]