~singpolyma/sgx-jmp

ref: 2d687b1a39c8318d4efba9300f428f58ed4ad713 sgx-jmp/lib/rack_fiber.rb -rw-r--r-- 516 bytes
2d687b1aStephen Paul Weber Patch bandwidth-iris to raise useful exceptions 11 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# frozen_string_literal: true

require "fiber"

module Rack
	class Fiber
		def initialize(app)
			@app = app
		end

		def call(env)
			async_callback = env.delete("async.callback")
			EM.next_tick { run_fiber(env, async_callback) }
			throw :async
		end

	protected

		def run_fiber(env, async_callback)
			::Fiber.new {
				begin
					async_callback.call(@app.call(env))
				rescue ::Exception # rubocop:disable Lint/RescueException
					async_callback.call([500, {}, [$!.to_s]])
				end
			}.resume
		end
	end
end