def set_session(env, session_id, new_session, options)
@mutex.lock if env['rack.multithread']
session = @pool[session_id]
if options[:renew] or options[:drop]
@pool.delete session_id
return false if options[:drop]
session_id = generate_sid
@pool.store session_id, 0
end
old_session = new_session.instance_variable_get('@old') || {}
session = merge_sessions session_id, old_session, new_session, session
@pool.store session_id, session
return session_id
rescue
warn "#{new_session.inspect} has been lost."
warn $!.inspect
ensure
@mutex.unlock if env['rack.multithread']
end