From bc97b421d2207b897f4c441ae1ecc527d2a1e743 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Tue, 4 Aug 2015 10:35:42 +0200 Subject: [PATCH] Register the worker memory reporter outside the _ar scope. The comment that claims it needs to be in that scope appears to be incorrect. --- .../script/dom/dedicatedworkerglobalscope.rs | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/components/script/dom/dedicatedworkerglobalscope.rs b/components/script/dom/dedicatedworkerglobalscope.rs index 5a1820b891e..3bcda27adef 100644 --- a/components/script/dom/dedicatedworkerglobalscope.rs +++ b/components/script/dom/dedicatedworkerglobalscope.rs @@ -188,7 +188,6 @@ impl DedicatedWorkerGlobalScope { // FIXME(njn): workers currently don't have a unique ID suitable for using in reporter // registration (#6631), so we instead use a random number and cross our fingers. let scope = WorkerGlobalScopeCast::from_ref(global.r()); - let reporter_name = format!("worker-reporter-{}", random::()); { let _ar = AutoWorkerReset::new(global.r(), worker); @@ -204,21 +203,21 @@ impl DedicatedWorkerGlobalScope { report_pending_exception(runtime.cx(), global.r().reflector().get_jsobject().get()); } } - - // Register this task as a memory reporter. This needs to be done within the - // scope of `_ar` otherwise script_chan_as_reporter() will panic. - let (reporter_sender, reporter_receiver) = ipc::channel().unwrap(); - ROUTER.add_route(reporter_receiver.to_opaque(), box move |reporter_request| { - // Just injects an appropriate event into the worker task's queue. - let reporter_request: ReporterRequest = reporter_request.to().unwrap(); - parent_sender_for_reporter.send(ScriptMsg::CollectReports( - reporter_request.reports_channel)).unwrap() - }); - scope.mem_profiler_chan().send(mem::ProfilerMsg::RegisterReporter( - reporter_name.clone(), - Reporter(reporter_sender))); } + // Register this task as a memory reporter. + let reporter_name = format!("worker-reporter-{}", random::()); + let (reporter_sender, reporter_receiver) = ipc::channel().unwrap(); + ROUTER.add_route(reporter_receiver.to_opaque(), box move |reporter_request| { + // Just injects an appropriate event into the worker task's queue. + let reporter_request: ReporterRequest = reporter_request.to().unwrap(); + parent_sender_for_reporter.send(ScriptMsg::CollectReports( + reporter_request.reports_channel)).unwrap() + }); + scope.mem_profiler_chan().send(mem::ProfilerMsg::RegisterReporter( + reporter_name.clone(), + Reporter(reporter_sender))); + while let Ok(event) = global.receive_event() { global.handle_event(event); }