59: def set_session(env, session_id, new_session, options)
60: @mutex.lock if env['rack.multithread']
61: session = @pool[session_id]
62: if options[:renew] or options[:drop]
63: @pool.delete session_id
64: return false if options[:drop]
65: session_id = generate_sid
66: @pool.store session_id, 0
67: end
68: old_session = new_session.instance_variable_get('@old') || {}
69: session = merge_sessions session_id, old_session, new_session, session
70: @pool.store session_id, session
71: return session_id
72: rescue
73: warn "#{new_session.inspect} has been lost."
74: warn $!.inspect
75: ensure
76: @mutex.unlock if env['rack.multithread']
77: end