class PhusionPassenger::SpawnManager

def spawn_rack_application(options)

def spawn_rack_application(options)
	app_group_name = options["app_group_name"]
	spawn_method   = options["spawn_method"]
	spawner        = nil
	create_spawner = nil
	key            = nil
	
	case spawn_method
	when nil, "", "smart", "smart-lv2"
		@spawners.synchronize do
			key = "app:#{app_group_name}"
			spawner = @spawners.lookup_or_add(key) do
				spawner_timeout = options["app_spawner_timeout"]
				spawner = Rack::ApplicationSpawner.new(
					@options.merge(options))
				if spawner_timeout != -1
					spawner.max_idle_time = spawner_timeout
				end
				spawner.start
				spawner
			end
			begin
				return spawner.spawn_application(options)
			rescue AbstractServer::ServerError
				@spawners.delete(key)
				raise
			end
		end
	else
		return Rack::ApplicationSpawner.spawn_application(
			@options.merge(options))
	end
end