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]