summaryrefslogtreecommitdiff
path: root/runtime
diff options
context:
space:
mode:
Diffstat (limited to 'runtime')
-rw-r--r--runtime/js/40_signals.js182
-rw-r--r--runtime/js/90_deno_ns.js1
-rw-r--r--runtime/js/99_main.js3
-rw-r--r--runtime/ops/process.rs11
-rw-r--r--runtime/ops/signal.rs92
5 files changed, 96 insertions, 193 deletions
diff --git a/runtime/js/40_signals.js b/runtime/js/40_signals.js
index 67c1da313..40fe94d42 100644
--- a/runtime/js/40_signals.js
+++ b/runtime/js/40_signals.js
@@ -7,7 +7,6 @@
const { errors } = window.__bootstrap.errors;
const {
Error,
- ObjectAssign,
Promise,
PromisePrototypeThen,
PromiseResolve,
@@ -26,148 +25,6 @@
core.opSync("op_signal_unbind", rid);
}
- // From `kill -l`
- const LinuxSignal = {
- 1: "SIGHUP",
- 2: "SIGINT",
- 3: "SIGQUIT",
- 4: "SIGILL",
- 5: "SIGTRAP",
- 6: "SIGABRT",
- 7: "SIGBUS",
- 8: "SIGFPE",
- 9: "SIGKILL",
- 10: "SIGUSR1",
- 11: "SIGSEGV",
- 12: "SIGUSR2",
- 13: "SIGPIPE",
- 14: "SIGALRM",
- 15: "SIGTERM",
- 16: "SIGSTKFLT",
- 17: "SIGCHLD",
- 18: "SIGCONT",
- 19: "SIGSTOP",
- 20: "SIGTSTP",
- 21: "SIGTTIN",
- 22: "SIGTTOU",
- 23: "SIGURG",
- 24: "SIGXCPU",
- 25: "SIGXFSZ",
- 26: "SIGVTALRM",
- 27: "SIGPROF",
- 28: "SIGWINCH",
- 29: "SIGIO",
- 30: "SIGPWR",
- 31: "SIGSYS",
- SIGHUP: 1,
- SIGINT: 2,
- SIGQUIT: 3,
- SIGILL: 4,
- SIGTRAP: 5,
- SIGABRT: 6,
- SIGBUS: 7,
- SIGFPE: 8,
- SIGKILL: 9,
- SIGUSR1: 10,
- SIGSEGV: 11,
- SIGUSR2: 12,
- SIGPIPE: 13,
- SIGALRM: 14,
- SIGTERM: 15,
- SIGSTKFLT: 16,
- SIGCHLD: 17,
- SIGCONT: 18,
- SIGSTOP: 19,
- SIGTSTP: 20,
- SIGTTIN: 21,
- SIGTTOU: 22,
- SIGURG: 23,
- SIGXCPU: 24,
- SIGXFSZ: 25,
- SIGVTALRM: 26,
- SIGPROF: 27,
- SIGWINCH: 28,
- SIGIO: 29,
- SIGPWR: 30,
- SIGSYS: 31,
- };
-
- // From `kill -l`
- const MacOSSignal = {
- 1: "SIGHUP",
- 2: "SIGINT",
- 3: "SIGQUIT",
- 4: "SIGILL",
- 5: "SIGTRAP",
- 6: "SIGABRT",
- 7: "SIGEMT",
- 8: "SIGFPE",
- 9: "SIGKILL",
- 10: "SIGBUS",
- 11: "SIGSEGV",
- 12: "SIGSYS",
- 13: "SIGPIPE",
- 14: "SIGALRM",
- 15: "SIGTERM",
- 16: "SIGURG",
- 17: "SIGSTOP",
- 18: "SIGTSTP",
- 19: "SIGCONT",
- 20: "SIGCHLD",
- 21: "SIGTTIN",
- 22: "SIGTTOU",
- 23: "SIGIO",
- 24: "SIGXCPU",
- 25: "SIGXFSZ",
- 26: "SIGVTALRM",
- 27: "SIGPROF",
- 28: "SIGWINCH",
- 29: "SIGINFO",
- 30: "SIGUSR1",
- 31: "SIGUSR2",
- SIGHUP: 1,
- SIGINT: 2,
- SIGQUIT: 3,
- SIGILL: 4,
- SIGTRAP: 5,
- SIGABRT: 6,
- SIGEMT: 7,
- SIGFPE: 8,
- SIGKILL: 9,
- SIGBUS: 10,
- SIGSEGV: 11,
- SIGSYS: 12,
- SIGPIPE: 13,
- SIGALRM: 14,
- SIGTERM: 15,
- SIGURG: 16,
- SIGSTOP: 17,
- SIGTSTP: 18,
- SIGCONT: 19,
- SIGCHLD: 20,
- SIGTTIN: 21,
- SIGTTOU: 22,
- SIGIO: 23,
- SIGXCPU: 24,
- SIGXFSZ: 25,
- SIGVTALRM: 26,
- SIGPROF: 27,
- SIGWINCH: 28,
- SIGINFO: 29,
- SIGUSR1: 30,
- SIGUSR2: 31,
- };
-
- const Signal = {};
-
- function setSignals() {
- if (build.os === "darwin") {
- ObjectAssign(Signal, MacOSSignal);
- } else {
- ObjectAssign(Signal, LinuxSignal);
- }
- }
-
function signal(signo) {
if (build.os === "windows") {
throw new Error("not implemented!");
@@ -175,42 +32,6 @@
return new SignalStream(signo);
}
- const signals = {
- alarm() {
- return signal(Signal.SIGALRM);
- },
- child() {
- return signal(Signal.SIGCHLD);
- },
- hungup() {
- return signal(Signal.SIGHUP);
- },
- interrupt() {
- return signal(Signal.SIGINT);
- },
- io() {
- return signal(Signal.SIGIO);
- },
- pipe() {
- return signal(Signal.SIGPIPE);
- },
- quit() {
- return signal(Signal.SIGQUIT);
- },
- terminate() {
- return signal(Signal.SIGTERM);
- },
- userDefined1() {
- return signal(Signal.SIGUSR1);
- },
- userDefined2() {
- return signal(Signal.SIGUSR2);
- },
- windowChange() {
- return signal(Signal.SIGWINCH);
- },
- };
-
class SignalStream {
#disposed = false;
#pollingPromise = PromiseResolve(false);
@@ -275,9 +96,6 @@
window.__bootstrap.signals = {
signal,
- signals,
- Signal,
SignalStream,
- setSignals,
};
})(this);
diff --git a/runtime/js/90_deno_ns.js b/runtime/js/90_deno_ns.js
index 71c8bd0f0..8f1fe89f5 100644
--- a/runtime/js/90_deno_ns.js
+++ b/runtime/js/90_deno_ns.js
@@ -106,7 +106,6 @@
__bootstrap.denoNsUnstable = {
signal: __bootstrap.signals.signal,
- signals: __bootstrap.signals.signals,
Signal: __bootstrap.signals.Signal,
SignalStream: __bootstrap.signals.SignalStream,
emit: __bootstrap.compilerApi.emit,
diff --git a/runtime/js/99_main.js b/runtime/js/99_main.js
index c9dd611da..59b3a428f 100644
--- a/runtime/js/99_main.js
+++ b/runtime/js/99_main.js
@@ -37,7 +37,6 @@ delete Object.prototype.__proto__;
const encoding = window.__bootstrap.encoding;
const Console = window.__bootstrap.console.Console;
const worker = window.__bootstrap.worker;
- const signals = window.__bootstrap.signals;
const internals = window.__bootstrap.internals;
const performance = window.__bootstrap.performance;
const crypto = window.__bootstrap.crypto;
@@ -609,7 +608,6 @@ delete Object.prototype.__proto__;
// `Deno` with `Deno` namespace from "./deno.ts".
ObjectDefineProperty(globalThis, "Deno", util.readOnly(finalDenoNs));
ObjectFreeze(globalThis.Deno.core);
- signals.setSignals();
util.log("args", args);
}
@@ -697,7 +695,6 @@ delete Object.prototype.__proto__;
// existing global `Deno` with `Deno` namespace from "./deno.ts".
ObjectDefineProperty(globalThis, "Deno", util.readOnly(finalDenoNs));
ObjectFreeze(globalThis.Deno.core);
- signals.setSignals();
} else {
delete globalThis.Deno;
util.assert(globalThis.Deno === undefined);
diff --git a/runtime/ops/process.rs b/runtime/ops/process.rs
index 44ead73da..b1d5e80ca 100644
--- a/runtime/ops/process.rs
+++ b/runtime/ops/process.rs
@@ -198,7 +198,7 @@ fn op_run(
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
-struct RunStatus {
+struct ProcessStatus {
got_signal: bool,
exit_code: i32,
exit_signal: i32,
@@ -208,7 +208,7 @@ async fn op_run_status(
state: Rc<RefCell<OpState>>,
rid: ResourceId,
_: (),
-) -> Result<RunStatus, AnyError> {
+) -> Result<ProcessStatus, AnyError> {
let resource = state
.borrow_mut()
.resource_table
@@ -227,7 +227,7 @@ async fn op_run_status(
.expect("Should have either an exit code or a signal.");
let got_signal = signal.is_some();
- Ok(RunStatus {
+ Ok(ProcessStatus {
got_signal,
exit_code: code.unwrap_or(-1),
exit_signal: signal.unwrap_or(-1),
@@ -288,13 +288,14 @@ pub fn kill(pid: i32, signal: i32) -> Result<(), AnyError> {
#[derive(Deserialize)]
struct KillArgs {
pid: i32,
- signo: i32,
+ signo: String,
}
fn op_kill(state: &mut OpState, args: KillArgs, _: ()) -> Result<(), AnyError> {
super::check_unstable(state, "Deno.kill");
state.borrow_mut::<Permissions>().run.check_all()?;
- kill(args.pid, args.signo)?;
+ let signo = super::signal::signal_str_to_int_unwrap(&args.signo)?;
+ kill(args.pid, signo)?;
Ok(())
}
diff --git a/runtime/ops/signal.rs b/runtime/ops/signal.rs
index 889021706..eea8161cd 100644
--- a/runtime/ops/signal.rs
+++ b/runtime/ops/signal.rs
@@ -1,4 +1,5 @@
// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
+use deno_core::error::type_error;
use deno_core::error::AnyError;
use deno_core::op_async_unref;
use deno_core::op_sync;
@@ -53,15 +54,102 @@ impl Resource for SignalStreamResource {
}
}
+#[cfg(target_os = "linux")]
+fn signal_str_to_int(s: &str) -> Option<libc::c_int> {
+ match s {
+ "SIGHUP" => Some(1),
+ "SIGINT" => Some(2),
+ "SIGQUIT" => Some(3),
+ "SIGILL" => Some(4),
+ "SIGTRAP" => Some(5),
+ "SIGABRT" => Some(6),
+ "SIGBUS" => Some(7),
+ "SIGFPE" => Some(8),
+ "SIGKILL" => Some(9),
+ "SIGUSR1" => Some(10),
+ "SIGSEGV" => Some(11),
+ "SIGUSR2" => Some(12),
+ "SIGPIPE" => Some(13),
+ "SIGALRM" => Some(14),
+ "SIGTERM" => Some(15),
+ "SIGSTKFLT" => Some(16),
+ "SIGCHLD" => Some(17),
+ "SIGCONT" => Some(18),
+ "SIGSTOP" => Some(19),
+ "SIGTSTP" => Some(20),
+ "SIGTTIN" => Some(21),
+ "SIGTTOU" => Some(22),
+ "SIGURG" => Some(23),
+ "SIGXCPU" => Some(24),
+ "SIGXFSZ" => Some(25),
+ "SIGVTALRM" => Some(26),
+ "SIGPROF" => Some(27),
+ "SIGWINCH" => Some(28),
+ "SIGIO" => Some(29),
+ "SIGPWR" => Some(30),
+ "SIGSYS" => Some(31),
+ _ => None,
+ }
+}
+
+#[cfg(target_os = "macos")]
+fn signal_str_to_int(s: &str) -> Option<libc::c_int> {
+ match s {
+ "SIGHUP" => Some(1),
+ "SIGINT" => Some(2),
+ "SIGQUIT" => Some(3),
+ "SIGILL" => Some(4),
+ "SIGTRAP" => Some(5),
+ "SIGABRT" => Some(6),
+ "SIGEMT" => Some(7),
+ "SIGFPE" => Some(8),
+ "SIGKILL" => Some(9),
+ "SIGBUS" => Some(10),
+ "SIGSEGV" => Some(11),
+ "SIGSYS" => Some(12),
+ "SIGPIPE" => Some(13),
+ "SIGALRM" => Some(14),
+ "SIGTERM" => Some(15),
+ "SIGURG" => Some(16),
+ "SIGSTOP" => Some(17),
+ "SIGTSTP" => Some(18),
+ "SIGCONT" => Some(19),
+ "SIGCHLD" => Some(20),
+ "SIGTTIN" => Some(21),
+ "SIGTTOU" => Some(22),
+ "SIGIO" => Some(23),
+ "SIGXCPU" => Some(24),
+ "SIGXFSZ" => Some(25),
+ "SIGVTALRM" => Some(26),
+ "SIGPROF" => Some(27),
+ "SIGWINCH" => Some(28),
+ "SIGINFO" => Some(29),
+ "SIGUSR1" => Some(30),
+ "SIGUSR2" => Some(31),
+ _ => None,
+ }
+}
+
+#[cfg(target_os = "windows")]
+fn signal_str_to_int(s: &str) -> Option<libc::c_int> {
+ unimplemented!()
+}
+
+pub fn signal_str_to_int_unwrap(s: &str) -> Result<libc::c_int, AnyError> {
+ signal_str_to_int(s)
+ .ok_or_else(|| type_error(format!("Invalid signal : {}", s)))
+}
+
#[cfg(unix)]
fn op_signal_bind(
state: &mut OpState,
- signo: i32,
+ sig: String,
_: (),
) -> Result<ResourceId, AnyError> {
super::check_unstable(state, "Deno.signal");
+ let signo = signal_str_to_int_unwrap(&sig)?;
let resource = SignalStreamResource {
- signal: AsyncRefCell::new(signal(SignalKind::from_raw(signo)).expect("")),
+ signal: AsyncRefCell::new(signal(SignalKind::from_raw(signo)).unwrap()),
cancel: Default::default(),
};
let rid = state.resource_table.add(resource);