From 04c41c243313b66e5d252bd7a6bfd3c0a1b925e0 Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Fri, 22 Jul 2022 10:36:27 +0200 Subject: [PATCH] Ensure signalHandler is kept around and unregistered --- src/Composer/Console/Application.php | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/Composer/Console/Application.php b/src/Composer/Console/Application.php index 315379a2c505..fc0144bd4e5d 100644 --- a/src/Composer/Console/Application.php +++ b/src/Composer/Console/Application.php @@ -81,6 +81,9 @@ class Application extends BaseApplication */ private $initialWorkingDirectory; + /** @var SignalHandler */ + private $signalHandler; + public function __construct() { static $shutdownRegistered = false; @@ -96,13 +99,13 @@ public function __construct() $this->io = new NullIO(); - if (!$shutdownRegistered) { - $signalHandler = SignalHandler::create([SignalHandler::SIGINT, SignalHandler::SIGTERM, SignalHandler::SIGHUP], function (string $signal, SignalHandler $handler) { - $this->io->writeError('Received '.$signal.', aborting', true, IOInterface::DEBUG); + $this->signalHandler = SignalHandler::create([SignalHandler::SIGINT, SignalHandler::SIGTERM, SignalHandler::SIGHUP], function (string $signal, SignalHandler $handler) { + $this->io->writeError('Received '.$signal.', aborting', true, IOInterface::DEBUG); - $handler->exitWithLastSignal(); - }); + $handler->exitWithLastSignal(); + }); + if (!$shutdownRegistered) { $shutdownRegistered = true; register_shutdown_function(static function (): void { @@ -121,6 +124,11 @@ public function __construct() parent::__construct('Composer', Composer::getVersion()); } + public function __destruct() + { + $this->signalHandler->unregister(); + } + public function run(InputInterface $input = null, OutputInterface $output = null): int { if (null === $output) {