summaryrefslogtreecommitdiff
path: root/runtime/ops
diff options
context:
space:
mode:
authorBen Noordhuis <info@bnoordhuis.nl>2021-11-28 00:45:38 +0100
committerGitHub <noreply@github.com>2021-11-28 00:45:38 +0100
commit993a1dd41ae5f96bdb24b09757e24c2ac24126d0 (patch)
tree8b6c0d4de8f8101bf8a3c31fe4f163d18c2c298e /runtime/ops
parent1d3f734e1815bf1649e0cac445be9eacb4cd296d (diff)
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.
Diffstat (limited to 'runtime/ops')
-rw-r--r--runtime/ops/os.rs10
1 files changed, 9 insertions, 1 deletions
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)
}