diff options
Diffstat (limited to 'runtime')
| -rw-r--r-- | runtime/js/99_main.js | 2 | ||||
| -rw-r--r-- | runtime/ops/worker_host.rs | 4 | ||||
| -rw-r--r-- | runtime/web_worker.rs | 35 |
3 files changed, 25 insertions, 16 deletions
diff --git a/runtime/js/99_main.js b/runtime/js/99_main.js index 585128ba8..62e7278ff 100644 --- a/runtime/js/99_main.js +++ b/runtime/js/99_main.js @@ -794,6 +794,7 @@ function bootstrapWorkerRuntime( runtimeOptions, name, internalName, + workerId, maybeWorkerMetadata, ) { if (hasBootstrapped) { @@ -929,6 +930,7 @@ function bootstrapWorkerRuntime( hasNodeModulesDir, argv0, /* runningOnMainThread */ false, + workerId, workerMetadata, ); } diff --git a/runtime/ops/worker_host.rs b/runtime/ops/worker_host.rs index 3cfad5abb..242d3bcda 100644 --- a/runtime/ops/worker_host.rs +++ b/runtime/ops/worker_host.rs @@ -95,7 +95,6 @@ deno_core::extension!( }, state = |state, options| { state.put::<WorkersTable>(WorkersTable::default()); - state.put::<WorkerId>(WorkerId::default()); let create_web_worker_cb_holder = CreateWebWorkerCbHolder(options.create_web_worker_cb); @@ -163,10 +162,9 @@ fn op_create_worker( parent_permissions.clone() }; let parent_permissions = parent_permissions.clone(); - let worker_id = state.take::<WorkerId>(); let create_web_worker_cb = state.borrow::<CreateWebWorkerCbHolder>().clone(); let format_js_error_fn = state.borrow::<FormatJsErrorFnHolder>().clone(); - state.put::<WorkerId>(worker_id.next().unwrap()); + let worker_id = WorkerId::new(); let module_specifier = deno_core::resolve_url(&specifier)?; let worker_name = args_name.unwrap_or_default(); diff --git a/runtime/web_worker.rs b/runtime/web_worker.rs index 82da9de9e..31930be39 100644 --- a/runtime/web_worker.rs +++ b/runtime/web_worker.rs @@ -55,33 +55,40 @@ use std::cell::RefCell; use std::fmt; use std::rc::Rc; use std::sync::atomic::AtomicBool; +use std::sync::atomic::AtomicU32; use std::sync::atomic::Ordering; use std::sync::Arc; use std::task::Context; use std::task::Poll; -#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "lowercase")] -pub enum WebWorkerType { - Classic, - Module, -} +static WORKER_ID_COUNTER: AtomicU32 = AtomicU32::new(1); -#[derive( - Debug, Default, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, -)] +#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub struct WorkerId(u32); +impl WorkerId { + pub fn new() -> WorkerId { + let id = WORKER_ID_COUNTER.fetch_add(1, Ordering::SeqCst); + WorkerId(id) + } +} impl fmt::Display for WorkerId { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "worker-{}", self.0) } } -impl WorkerId { - pub fn next(&self) -> Option<WorkerId> { - self.0.checked_add(1).map(WorkerId) +impl Default for WorkerId { + fn default() -> Self { + Self::new() } } +#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[serde(rename_all = "lowercase")] +pub enum WebWorkerType { + Classic, + Module, +} + /// Events that are sent to host from child /// worker. pub enum WorkerControlEvent { @@ -630,11 +637,13 @@ impl WebWorker { v8::String::new(scope, &format!("{}", self.id)) .unwrap() .into(); + let id: v8::Local<v8::Value> = + v8::Integer::new(scope, self.id.0 as i32).into(); bootstrap_fn .call( scope, undefined.into(), - &[args, name_str, id_str, worker_data], + &[args, name_str, id_str, id, worker_data], ) .unwrap(); } |
