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