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