Sha256: 5217a02b1065ad9e059833e4f07ce9389f02a6e6754142dd3e7d7ae57a4303dd

Contents?: true

Size: 688 Bytes

Versions: 1

Compression:

Stored size: 688 Bytes

Contents

# frozen_string_literal: true

require_relative './um_ext'
require_relative 'uringmachine/dns_resolver'

UM = UringMachine

class UringMachine
  @@fiber_map = {}

  def spin(value = nil, &block)
    f = Fiber.new do |resume_value|
      block.(resume_value)
    rescue Exception => e
      STDERR.puts "Unhandled fiber exception: #{e.inspect}"
      STDERR.puts e.backtrace.join("\n")
      exit
    ensure
      @@fiber_map.delete(f)
      # yield control
      self.yield
      p :bad_bad_bad
    end
    schedule(f, value)
    @@fiber_map[f] = true
    f
  end

  def resolve(hostname, type = :A)
    @resolver ||= DNSResolver.new(self)
    @resolver.resolve(hostname, type)
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
uringmachine-0.5 lib/uringmachine.rb