Sha256: ac00e92a4ff79b89583e4b113083c97efac08d26e2b455ae053573b3bcfbdb8d

Contents?: true

Size: 800 Bytes

Versions: 3

Compression:

Stored size: 800 Bytes

Contents

class SleepyPenguin::Kqueue::IO
  # :stopdoc:
  # this file is only for Ruby 1.8 green threads compatibility
  alias __kevent kevent
  undef_method :kevent

  def __update_timeout(expire_at)
    now = Time.now
    diff = expire_at - now
    diff > 0 ? diff : 0
  end

  def kevent(changelist = nil, nevents = nil, timeout = nil)
    if block_given?
      expire_at = timeout ? Time.now + timeout : nil
      begin
        IO.select([self], nil, nil, timeout)
        n = __kevent(changelist, nevents, 0) do |*args|
          yield(*args)
        end
      end while n == 0 && timeout != 0 &&
                (expire_at == nil || timeout = __update_timeout(expire_at))
      n
    else
      # nevents should be zero or nil here
      __kevent(changelist, nevents, 0)
    end
  end
  # :startdoc:
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
sleepy_penguin-3.4.1 lib/sleepy_penguin/kqueue/io.rb
sleepy_penguin-3.3.0 lib/sleepy_penguin/kqueue/io.rb
sleepy_penguin-3.2.0 lib/sleepy_penguin/kqueue/io.rb