diff --git a/lib/rage/fiber.rb b/lib/rage/fiber.rb index d68f5aa8..d58cf217 100644 --- a/lib/rage/fiber.rb +++ b/lib/rage/fiber.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true class Fiber + # @private AWAIT_ERROR_MESSAGE = "err" # @private @@ -23,14 +24,14 @@ def __get_err @__err end - # @private - def __get_id - @__rage_id ||= object_id.to_s + # @private + def __set_id + @__rage_id = object_id.to_s end - # @private - def __yielded? - !@__rage_id.nil? + # @private + def __get_id + @__rage_id end # @private diff --git a/lib/rage/fiber_scheduler.rb b/lib/rage/fiber_scheduler.rb index 3553e64a..83207218 100644 --- a/lib/rage/fiber_scheduler.rb +++ b/lib/rage/fiber_scheduler.rb @@ -109,6 +109,7 @@ def fiber(&block) fiber = if parent == @root_fiber # the fiber to wrap a request in Fiber.new(blocking: false) do + Fiber.current.__set_id Fiber.current.__set_result(block.call) end else diff --git a/lib/rage/middleware/fiber_wrapper.rb b/lib/rage/middleware/fiber_wrapper.rb index e45ef3e3..2f0c4fed 100644 --- a/lib/rage/middleware/fiber_wrapper.rb +++ b/lib/rage/middleware/fiber_wrapper.rb @@ -17,7 +17,7 @@ def call(env) @app.call(env) ensure # notify Iodine the request can now be resumed - Iodine.publish(Fiber.current.__get_id, "", Iodine::PubSub::PROCESS) if Fiber.current.__yielded? + Iodine.publish(Fiber.current.__get_id, "", Iodine::PubSub::PROCESS) end # the fiber encountered blocking IO and yielded; instruct Iodine to pause the request diff --git a/lib/rage/rspec.rb b/lib/rage/rspec.rb index 8d0656a6..f3acb341 100644 --- a/lib/rage/rspec.rb +++ b/lib/rage/rspec.rb @@ -18,6 +18,7 @@ class Fiber def self.schedule(&block) fiber = Fiber.new(blocking: true) do + Fiber.current.__set_id Fiber.current.__set_result(block.call) end fiber.resume