Sha256: 53f7452530c6e58a0084bfe276c0e4e9f94c0b7aea48b9fc491b76470fcdf398
Contents?: true
Size: 1.2 KB
Versions: 1
Compression:
Stored size: 1.2 KB
Contents
# frozen_string_literal: true require 'lounger/version' # The Lounger class is the main class which will allow to handle traps # in simple way. class Lounger SIGNALS = %w[INT TERM EXIT USR1 QUIT].freeze def initialize(include_signals: [], exclude_signals: []) @lock = Mutex.new @condition = ConditionVariable.new @pending_signals = 0 @buffer = [] @idle = false (SIGNALS + include_signals - exclude_signals).each do |s| Signal.trap(s) { @condition.signal } end end def idle(ignore_pending: false) result = nil @lock.synchronize do @pending_signals = 0 if ignore_pending @idle = true if @pending_signals.positive? @pending_signals -= 1 else @condition.wait(@lock) @pending_signals -= 1 end @idle = false result = @buffer.shift end result end def idle? @idle end def wakeup!(value = nil) @lock.synchronize do @pending_signals += 1 @buffer << value @condition.signal end end def self.idle Lounger.new.idle end alias_method :waiting?, :idle? alias_method :wait, :idle alias_method :signal, :wakeup! end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
lounger-0.3.4 | lib/lounger.rb |