From 993a1dd41ae5f96bdb24b09757e24c2ac24126d0 Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Sun, 28 Nov 2021 00:45:38 +0100 Subject: feat(runtime): add op_set_exit_code (#12911) Set the exit code to use if none is provided to Deno.exit(), or when Deno exits naturally. Needed for process.exitCode Node compat. Paves the way for #12888. --- runtime/ops/os.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'runtime/ops') diff --git a/runtime/ops/os.rs b/runtime/ops/os.rs index 0a6269ac5..8e96de75d 100644 --- a/runtime/ops/os.rs +++ b/runtime/ops/os.rs @@ -10,6 +10,7 @@ use deno_core::OpState; use serde::Serialize; use std::collections::HashMap; use std::env; +use std::sync::atomic::Ordering::Relaxed; pub fn init() -> Extension { Extension::builder() @@ -23,6 +24,7 @@ pub fn init() -> Extension { ("op_hostname", op_sync(op_hostname)), ("op_loadavg", op_sync(op_loadavg)), ("op_os_release", op_sync(op_os_release)), + ("op_set_exit_code", op_sync(op_set_exit_code)), ("op_system_memory_info", op_sync(op_system_memory_info)), ]) .build() @@ -95,7 +97,13 @@ fn op_delete_env( Ok(()) } -fn op_exit(_state: &mut OpState, code: i32, _: ()) -> Result<(), AnyError> { +fn op_set_exit_code(_: &mut OpState, code: i32, _: ()) -> Result<(), AnyError> { + crate::EXIT_CODE.store(code, Relaxed); + Ok(()) +} + +fn op_exit(_: &mut OpState, _: (), _: ()) -> Result<(), AnyError> { + let code = crate::EXIT_CODE.load(Relaxed); std::process::exit(code) } -- cgit v1.2.3