lib/async/io/trap.rb in async-io-1.25.0 vs lib/async/io/trap.rb in async-io-1.26.0

- old
+ new

@@ -34,13 +34,17 @@ @mutex = Mutex.new end # Ignore the trap within the current process. Can be invoked before forking and/or invoking `install!` to assert default behaviour. def ignore! - Signal.trap(@name, "IGNORE") + Signal.trap(@name, :IGNORE) end + def default! + Signal.trap(@name, :DEFAULT) + end + # Install the trap into the current process. Thread safe. # @return [Boolean] whether the trap was installed or not. If the trap was already installed, returns nil. def install! return if @installed @@ -53,25 +57,38 @@ end return true end - # Block the calling task until the signal occurs. - def trap - task = Task.current + # Wait until the signal occurs. If a block is given, execute in a loop. + # @yield [Async::Task] the current task. + def wait(task: Task.current, &block) task.annotate("waiting for signal #{@name}") notification = Notification.new @notifications << notification - while true + if block_given? + while true + notification.wait + yield task + end + else notification.wait - yield end ensure if notification notification.close @notifications.delete(notification) + end + end + + # Deprecated. + alias trap wait + + def async(parent: Task.current, &block) + parent.async do |task| + self.trap(task: task, &block) end end # Signal all waiting tasks that the trap occurred. # @return [void]