class Lounger

Constants

SIGNALS
VERSION

Public Class Methods

idle() click to toggle source
# File lib/lounger.rb, line 53
def self.idle
  Lounger.new.idle
end
new(include_signals: [], exclude_signals: []) click to toggle source
# File lib/lounger.rb, line 6
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|
    prev = Signal.trap(s) do
      @condition.signal
      prev.call unless prev.is_a?(String)
    end
  end
end

Public Instance Methods

idle(ignore_pending: false) click to toggle source
# File lib/lounger.rb, line 21
def idle(ignore_pending: false)
  result = nil
  @lock.synchronize do
    @pending_signals = 0 if ignore_pending
    @idle = true

    if @pending_signals > 0
      @pending_signals -= 1
    else
      @condition.wait(@lock)
      @pending_signals -= 1
    end

    @idle = false
    result = @buffer.shift
  end

  return result
end
Also aliased as: wait
idle?() click to toggle source
# File lib/lounger.rb, line 41
def idle?
  return @idle
end
Also aliased as: waiting?
signal(value = nil)
Alias for: wakeup!
wait(ignore_pending: false)
Alias for: idle
waiting?()
Alias for: idle?
wakeup!(value = nil) click to toggle source
# File lib/lounger.rb, line 45
def wakeup!(value = nil)
  @lock.synchronize do
    @pending_signals += 1
    @buffer << value
    @condition.signal
  end
end
Also aliased as: signal