module MemCache::EventedServer
Since we are working in a single Thread, multiple Fiber environment, disable the multithread Mutex as it will not work.
DEFAULT_OPTIONS[:multithread] = false
Public Instance Methods
close()
click to toggle source
# File lib/memcache/event_machine.rb, line 50 def close sock = Thread.current[fiber_key] if sock sock.close if !sock.closed? Thread.current[fiber_key] = nil end @retry = nil @status = "NOT CONNECTED" end
fiber_key()
click to toggle source
# File lib/memcache/event_machine.rb, line 17 def fiber_key @fiber_key ||= "memcached-#{@host}-#{@port}" end
socket()
click to toggle source
# File lib/memcache/event_machine.rb, line 21 def socket sock = Thread.current[fiber_key] return sock if sock and not sock.closed? Thread.current[fiber_key] = nil # If the host was dead, don't retry for a while. return if @retry and @retry > Time.now Thread.current[fiber_key] ||= begin sock = EM::SocketConnection.connect(@host, @port, @timeout) yielding = true fiber = Fiber.current sock.callback do @status = 'CONNECTED' @retry = nil yielding = false fiber.resume if Fiber.current != fiber end sock.errback do sock = nil yielding = false fiber.resume if Fiber.current != fiber end Fiber.yield if yielding sock end end