diff options
Diffstat (limited to 'runtime/ops/os.rs')
-rw-r--r-- | runtime/ops/os.rs | 10 |
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) } |