about summary refs log tree commit homepage
path: root/lib/dtas/sigevent/efd.rb
blob: d13c32acdaab6927b753bc43522b68eec2231371 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# Copyright (C) 2013-2020 all contributors <dtas-all@nongnu.org>
# License: GPL-3.0+ <https://www.gnu.org/licenses/gpl-3.0.txt>

# used in various places for safe wakeups from IO.select via signals
# This requires a modern Linux system and the "sleepy_penguin" RubyGem
require 'sleepy_penguin'

class DTAS::Sigevent < SleepyPenguin::EventFD # :nodoc:
  def self.new
    super(0, :CLOEXEC)
  end

  def signal
    incr(1)
  end

  def readable_iter
    value(true)
    yield self, nil # calls DTAS::Process.reaper
    :wait_readable
  end
end