diff --git a/cli/tsc/diagnostics.rs b/cli/tsc/diagnostics.rs index 1e9819309e..15aadff814 100644 --- a/cli/tsc/diagnostics.rs +++ b/cli/tsc/diagnostics.rs @@ -26,7 +26,6 @@ const UNSTABLE_DENO_PROPS: &[&str] = &[ "listen", "listenDatagram", "dlopen", - "ppid", "removeSignalListener", "shutdown", "umask", diff --git a/runtime/js/99_main.js b/runtime/js/99_main.js index 854a0029ec..f0c63df744 100644 --- a/runtime/js/99_main.js +++ b/runtime/js/99_main.js @@ -427,12 +427,11 @@ function bootstrapMainRuntime(runtimeOptions) { 8: tsVersion, 9: unstableFlag, 10: pid, - 11: ppid, - 12: target, - 13: v8Version, - 14: userAgent, - 15: inspectFlag, - // 16: enableTestingFeaturesFlag + 11: target, + 12: v8Version, + 13: userAgent, + 14: inspectFlag, + // 15: enableTestingFeaturesFlag } = runtimeOptions; performance.setTimeOrigin(DateNow()); @@ -495,9 +494,16 @@ function bootstrapMainRuntime(runtimeOptions) { setUserAgent(userAgent); setLanguage(locale); + let ppid = undefined; ObjectDefineProperties(finalDenoNs, { pid: util.readOnly(pid), - ppid: util.readOnly(ppid), + ppid: util.getterOnly(() => { + // lazy because it's expensive + if (ppid === undefined) { + ppid = ops.op_ppid(); + } + return ppid; + }), noColor: util.readOnly(noColor), args: util.readOnly(ObjectFreeze(args)), mainModule: util.getterOnly(opMainModule), @@ -535,12 +541,11 @@ function bootstrapWorkerRuntime( 8: tsVersion, 9: unstableFlag, 10: pid, - // 11: ppid, - 12: target, - 13: v8Version, - // 14: userAgent, - // 15: inspectFlag, - 16: enableTestingFeaturesFlag, + 11: target, + 12: v8Version, + // 13: userAgent, + // 14: inspectFlag, + 15: enableTestingFeaturesFlag, } = runtimeOptions; performance.setTimeOrigin(DateNow()); diff --git a/runtime/ops/runtime.rs b/runtime/ops/runtime.rs index 8802f9cd6c..9f2e48d7aa 100644 --- a/runtime/ops/runtime.rs +++ b/runtime/ops/runtime.rs @@ -8,7 +8,7 @@ use deno_core::OpState; deno_core::extension!( deno_runtime, - ops = [op_main_module], + ops = [op_main_module, op_ppid], options = { main_module: ModuleSpecifier }, state = |state, options| { state.put::(options.main_module); @@ -31,7 +31,10 @@ fn op_main_module(state: &mut OpState) -> Result { Ok(main_path) } -pub fn ppid() -> i64 { +/// This is an op instead of being done at initialization time because +/// it's expensive to retreive the ppid on Windows. +#[op] +pub fn op_ppid() -> i64 { #[cfg(windows)] { // Adopted from rustup: diff --git a/runtime/worker_bootstrap.rs b/runtime/worker_bootstrap.rs index 09725122cf..ba894f52b3 100644 --- a/runtime/worker_bootstrap.rs +++ b/runtime/worker_bootstrap.rs @@ -5,7 +5,6 @@ use deno_core::ModuleSpecifier; use std::thread; use crate::colors; -use crate::ops::runtime::ppid; /// Common bootstrap options for MainWorker & WebWorker #[derive(Clone)] @@ -61,7 +60,7 @@ impl BootstrapOptions { &self, scope: &mut v8::HandleScope<'s>, ) -> v8::Local<'s, v8::Array> { - let array = v8::Array::new(scope, 17); + let array = v8::Array::new(scope, 16); { let args = v8::Array::new(scope, self.args.len() as i32); @@ -142,18 +141,13 @@ impl BootstrapOptions { array.set_index(scope, 10, val.into()); } - { - let val = v8::Integer::new(scope, ppid() as i32); - array.set_index(scope, 11, val.into()); - } - { let val = v8::String::new_external_onebyte_static( scope, env!("TARGET").as_bytes(), ) .unwrap(); - array.set_index(scope, 12, val.into()); + array.set_index(scope, 11, val.into()); } { @@ -163,7 +157,7 @@ impl BootstrapOptions { v8::NewStringType::Normal, ) .unwrap(); - array.set_index(scope, 13, val.into()); + array.set_index(scope, 12, val.into()); } { @@ -173,17 +167,17 @@ impl BootstrapOptions { v8::NewStringType::Normal, ) .unwrap(); - array.set_index(scope, 14, val.into()); + array.set_index(scope, 13, val.into()); } { let val = v8::Boolean::new(scope, self.inspect); - array.set_index(scope, 15, val.into()); + array.set_index(scope, 14, val.into()); } { let val = v8::Boolean::new(scope, self.enable_testing_features); - array.set_index(scope, 16, val.into()); + array.set_index(scope, 15, val.into()); } array