summaryrefslogtreecommitdiff
path: root/runtime/ops
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2022-06-13 23:53:04 +0200
committerGitHub <noreply@github.com>2022-06-13 23:53:04 +0200
commitfc3a966a2d0be8fc76c384603bf18b55e0bbcf14 (patch)
tree2a3425488e0a199c035efbdde35c45cae1c22fb7 /runtime/ops
parent4a0a412d7cd077ff519b4da8f6ffd1247c6375a5 (diff)
Deno.exit() is an alias to self.close() in worker contexts (#14826)
This commit changes Deno.exit() to be an alias to self.close() in worker contexts, and the provided exit code becomes is ignored.
Diffstat (limited to 'runtime/ops')
-rw-r--r--runtime/ops/os.rs56
-rw-r--r--runtime/ops/worker_host.rs4
2 files changed, 38 insertions, 22 deletions
diff --git a/runtime/ops/os.rs b/runtime/ops/os.rs
index f138bae31..654bbede1 100644
--- a/runtime/ops/os.rs
+++ b/runtime/ops/os.rs
@@ -4,32 +4,36 @@ use super::utils::into_string;
use crate::permissions::Permissions;
use crate::worker::ExitCode;
use deno_core::error::{type_error, AnyError};
-use deno_core::op;
use deno_core::url::Url;
use deno_core::Extension;
use deno_core::OpState;
+use deno_core::{op, ExtensionBuilder};
use serde::Serialize;
use std::collections::HashMap;
use std::env;
+fn init_ops(builder: &mut ExtensionBuilder) -> &mut ExtensionBuilder {
+ builder.ops(vec![
+ op_env::decl(),
+ op_exec_path::decl(),
+ op_exit::decl(),
+ op_delete_env::decl(),
+ op_get_env::decl(),
+ op_getgid::decl(),
+ op_getuid::decl(),
+ op_hostname::decl(),
+ op_loadavg::decl(),
+ op_network_interfaces::decl(),
+ op_os_release::decl(),
+ op_set_env::decl(),
+ op_set_exit_code::decl(),
+ op_system_memory_info::decl(),
+ ])
+}
+
pub fn init(exit_code: ExitCode) -> Extension {
- Extension::builder()
- .ops(vec![
- op_env::decl(),
- op_exec_path::decl(),
- op_exit::decl(),
- op_delete_env::decl(),
- op_get_env::decl(),
- op_getgid::decl(),
- op_getuid::decl(),
- op_hostname::decl(),
- op_loadavg::decl(),
- op_network_interfaces::decl(),
- op_os_release::decl(),
- op_set_env::decl(),
- op_set_exit_code::decl(),
- op_system_memory_info::decl(),
- ])
+ let mut builder = Extension::builder();
+ init_ops(&mut builder)
.state(move |state| {
state.put::<ExitCode>(exit_code.clone());
Ok(())
@@ -37,6 +41,22 @@ pub fn init(exit_code: ExitCode) -> Extension {
.build()
}
+pub fn init_for_worker() -> Extension {
+ let mut builder = Extension::builder();
+ init_ops(&mut builder)
+ .middleware(|op| match op.name {
+ "op_exit" => noop_op::decl(),
+ "op_set_exit_code" => noop_op::decl(),
+ _ => op,
+ })
+ .build()
+}
+
+#[op]
+fn noop_op(_code: i32) -> Result<(), AnyError> {
+ Ok(())
+}
+
#[op]
fn op_exec_path(state: &mut OpState) -> Result<String, AnyError> {
let current_exe = env::current_exe().unwrap();
diff --git a/runtime/ops/worker_host.rs b/runtime/ops/worker_host.rs
index 9860f7cb5..b61fca460 100644
--- a/runtime/ops/worker_host.rs
+++ b/runtime/ops/worker_host.rs
@@ -11,7 +11,6 @@ use crate::web_worker::WebWorkerHandle;
use crate::web_worker::WebWorkerType;
use crate::web_worker::WorkerControlEvent;
use crate::web_worker::WorkerId;
-use crate::worker::ExitCode;
use crate::worker::FormatJsErrorFn;
use deno_core::error::AnyError;
use deno_core::futures::future::LocalFutureObj;
@@ -37,7 +36,6 @@ pub struct CreateWebWorkerArgs {
pub permissions: Permissions,
pub main_module: ModuleSpecifier,
pub worker_type: WebWorkerType,
- pub exit_code: ExitCode,
}
pub type CreateWebWorkerCb = dyn Fn(CreateWebWorkerArgs) -> (WebWorker, SendableWebWorkerHandle)
@@ -171,7 +169,6 @@ fn op_create_worker(
parent_permissions.clone()
};
let parent_permissions = parent_permissions.clone();
- let exit_code = state.borrow::<ExitCode>().clone();
let worker_id = state.take::<WorkerId>();
let create_web_worker_cb = state.take::<CreateWebWorkerCbHolder>();
state.put::<CreateWebWorkerCbHolder>(create_web_worker_cb.clone());
@@ -207,7 +204,6 @@ fn op_create_worker(
permissions: worker_permissions,
main_module: module_specifier.clone(),
worker_type,
- exit_code,
});
// Send thread safe handle from newly created worker to host thread