lib/lightio/core/backend/nio.rb in lightio-0.2.2 vs lib/lightio/core/backend/nio.rb in lightio-0.3.0
- old
+ new
@@ -53,11 +53,11 @@
# @selector = NIO::Selector.new
@current_loop_time = nil
@running = false
@timers = Timers.new
@callbacks = []
- @selector = ::NIO::Selector.new
+ @selector = ::NIO::Selector.new(env_backend)
end
def run
raise Error, "already running" if @running
@running = true
@@ -96,10 +96,19 @@
return unless @running
@running = false
raise
end
+ def backend
+ @selector.backend
+ end
+
+ def env_backend
+ key = 'LIGHTIO_BACKEND'.freeze
+ ENV.has_key?(key) ? ENV[key].to_sym : nil
+ end
+
private
def run_timers
@timers.fire(@current_loop_time)
end
@@ -110,10 +119,13 @@
monitor.value.call(monitor.io)
end
end
def run_callbacks
- while (callback = @callbacks.shift)
+ # prevent 'add new callbacks' during callback call, new callbacks will run in next turn
+ callbacks = @callbacks
+ @callbacks = []
+ while (callback = callbacks.shift)
callback.call
end
end
end
end
\ No newline at end of file