set_session (Rack::Session::Memcache)

    # File lib/rack/session/memcache.rb, line 64
          def set_session(env, session_id, new_session, options)
            expiry = options[:expire_after]
            expiry = expiry.nil? ? 0 : expiry + 1

            @mutex.lock if env['rack.multithread']
            session = @pool.get(session_id) || {}
            if options[:renew] or options[:drop]
              @pool.delete session_id
              return false if options[:drop]
              session_id = generate_sid
              @pool.add session_id, 0 # so we don't worry about cache miss on #set
            end
            old_session = new_session.instance_variable_get('@old') || {}
            session = merge_sessions session_id, old_session, new_session, session
            @pool.set session_id, session, expiry
            return session_id
          rescue MemCache::MemCacheError, Errno::ECONNREFUSED # MemCache server cannot be contacted
            warn "#{self} is unable to find server."
            warn $!.inspect
            return false
          ensure
            @mutex.unlock if env['rack.multithread']
          end