def get_session(env, session_id)
@mutex.lock if env['rack.multithread']
unless session_id and session = @pool.get(session_id)
session_id, session = generate_sid, {}
unless /^STORED/ =~ @pool.add(session_id, session)
raise "Session collision on '#{session_id.inspect}'"
end
end
session.instance_variable_set '@old', @pool.get(session_id, true)
return [session_id, session]
rescue MemCache::MemCacheError, Errno::ECONNREFUSED
warn "#{self} is unable to find memcached server."
warn $!.inspect
return [ nil, {} ]
ensure
@mutex.unlock if @mutex.locked?
end