aboutsummaryrefslogtreecommitdiffhomepage
path: root/Cargo.lock
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-08-11 12:19:31 +0900
committernsfisis <nsfisis@gmail.com>2026-08-11 12:19:31 +0900
commit9539fea16e0d8d07faf7edf50d480e0a80c4ccfc (patch)
treec989aae95701e24aace29fec25c9d33c4c065e6b /Cargo.lock
parent144d059b725e2d178d7f4a6403cde9474fe65dcc (diff)
downloadphp-shirabe-9539fea16e0d8d07faf7edf50d480e0a80c4ccfc.tar.gz
php-shirabe-9539fea16e0d8d07faf7edf50d480e0a80c4ccfc.tar.zst
php-shirabe-9539fea16e0d8d07faf7edf50d480e0a80c4ccfc.zip
feat(signal): abort on SIGINT, SIGTERM and SIGHUP at checkpoints
The SignalHandler port was a no-op stub, so all four of Composer's abort paths were dead code: nothing removed a half-created project, reverted composer.json, or cleaned up half-installed packages. Composer runs those handlers from pcntl callbacks, which a Rust signal handler cannot do -- it may touch nothing beyond atomics. SignalSubscription records the signal instead, and the abort runs from checkpoints on the normal call stack, where the clean-up can borrow the state it needs. That also resolves the closure-capture TODO(phase-c)s in RequireCommand and InstallationManager, and replaces exit_with_last_signal's exit(0) with the restore-and-re-raise Seld\Signal does. A subscription is live only inside the four abort regions, so elsewhere the signals keep their default disposition and kill the process at once. It is installed without SA_RESTART so a signal interrupts an interactive prompt rather than resuming the read. A signal reaches only the innermost subscription, reproducing SignalHandler's single-stack dispatch. Drop SignalRegistry, SignalableCommandInterface and the Application wiring for them: nothing in Composer reaches that path, and SignalHandler discards whatever they register. Signal handling from plugins and scripts is undefined behavior; see docs/dev/signals.md. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'Cargo.lock')
-rw-r--r--Cargo.lock6
1 files changed, 1 insertions, 5 deletions
diff --git a/Cargo.lock b/Cargo.lock
index a0057ec7..8098761e 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -2090,6 +2090,7 @@ dependencies = [
"jsonschema",
"md5",
"mockall",
+ "nix",
"regex",
"reqwest",
"serde",
@@ -2103,7 +2104,6 @@ dependencies = [
"shirabe-php-rpc",
"shirabe-php-shim",
"shirabe-seld-json-lint",
- "shirabe-seld-signal",
"shirabe-semver",
"shirabe-spdx-licenses",
"shirabe-symfony-console",
@@ -2202,10 +2202,6 @@ dependencies = [
]
[[package]]
-name = "shirabe-seld-signal"
-version = "0.0.1"
-
-[[package]]
name = "shirabe-semver"
version = "0.0.1"
dependencies = [