Sha256: 9e16bb0cfa9d1e5558fcb80cc41e2d6f688df2a2479da1c91391fb1a76d9d945
Contents?: true
Size: 1 KB
Versions: 2
Compression:
Stored size: 1 KB
Contents
# frozen_string_literal: true Exceptions = import '../core/exceptions' # Thread extensions class ::Thread attr_reader :main_fiber alias_method :orig_initialize, :initialize def initialize(*args, &block) @join_wait_queue = Gyro::Queue.new @block = block orig_initialize do setup_fiber_scheduling block.(*args) signal_waiters ensure stop_event_selector end end def signal_waiters @join_wait_queue.shift_each { |w| w.signal!(self) } end alias_method :orig_join, :join def join(timeout = nil) return unless alive? async = Gyro::Async.new @join_wait_queue << async if timeout move_on_after(timeout) { async.await } else async.await end end alias_method :orig_inspect, :inspect def inspect return orig_inspect if self == Thread.main state = status || 'dead' "#<Thread:#{object_id} #{location} (#{state})>" end alias_method :to_s, :inspect def location @block.source_location.join(':') end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
polyphony-0.28 | lib/polyphony/extensions/thread.rb |
polyphony-0.27 | lib/polyphony/extensions/thread.rb |