lib/async/container/controller.rb in async-container-0.16.12 vs lib/async/container/controller.rb in async-container-0.16.13

- old
+ new

@@ -1,26 +1,9 @@ # frozen_string_literal: true -# Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com> -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. +# Released under the MIT License. +# Copyright, 2018-2024, by Samuel Williams. require_relative 'error' require_relative 'best' require_relative 'statistics' @@ -191,19 +174,20 @@ end # Enter the controller run loop, trapping `SIGINT` and `SIGTERM`. def run # I thought this was the default... but it doesn't always raise an exception unless you do this explicitly. + # We use `Thread.current.raise(...)` so that exceptions are filtered through `Thread.handle_interrupt` correctly. interrupt_action = Signal.trap(:INT) do - raise Interrupt + ::Thread.current.raise(Interrupt) end terminate_action = Signal.trap(:TERM) do - raise Terminate + ::Thread.current.raise(Terminate) end hangup_action = Signal.trap(:HUP) do - raise Hangup + ::Thread.current.raise(Hangup) end self.start while @container&.running?