Skip to content

Instantly share code, notes, and snippets.

@JoshMcKin
Created July 1, 2011 15:24
Show Gist options
  • Save JoshMcKin/1058768 to your computer and use it in GitHub Desktop.
Save JoshMcKin/1058768 to your computer and use it in GitHub Desktop.
EM-mysql2 dead fiber from Rails exception patch
module Mysql2
module Fibered
class Client < ::Mysql2::Client
def query(sql, opts={})
if ::EM.reactor_running?
super(sql, opts.merge(:async => true))
deferrable = ::EM::DefaultDeferrable.new
::EM.watch(self.socket, Watcher, self, deferrable).notify_readable = true
fiber = Fiber.current
deferrable.callback do |result|
# Make sure fiber is still alive
fiber.resume(result) if fiber.alive?
end
deferrable.errback do |err|
# Make sure fiber is still alive
fiber.resume(err) if fiber.alive?
end
Fiber.yield.tap do |result|
raise result if result.is_a?(Exception)
end
else
super(sql, opts)
end
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment