Skip to content

Commit 34811de

Browse files
committed
Compatibility with Fiber scheduler.
1 parent f4e1caf commit 34811de

1 file changed

Lines changed: 15 additions & 13 deletions

File tree

lib/timeout.rb

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -282,19 +282,21 @@ def self.timeout(sec, klass = nil, message = nil, &block) #:yield: +sec+
282282
message ||= "execution expired"
283283

284284
if Fiber.respond_to?(:current_scheduler) && (scheduler = Fiber.current_scheduler)&.respond_to?(:timeout_after)
285-
return scheduler.timeout_after(sec, klass || Error, message, &block)
286-
end
287-
288-
state = State.instance
289-
state.ensure_timeout_thread_created
290-
291-
perform = Proc.new do |exc|
292-
request = Request.new(Thread.current, sec, exc, message)
293-
state.add_request(request)
294-
begin
295-
return yield(sec)
296-
ensure
297-
request.finished
285+
perform = Proc.new do |exc|
286+
scheduler.timeout_after(sec, exc, message, &block)
287+
end
288+
else
289+
state = State.instance
290+
state.ensure_timeout_thread_created
291+
292+
perform = Proc.new do |exc|
293+
request = Request.new(Thread.current, sec, exc, message)
294+
state.add_request(request)
295+
begin
296+
return yield(sec)
297+
ensure
298+
request.finished
299+
end
298300
end
299301
end
300302

0 commit comments

Comments
 (0)