From 384cdf27ce98345d8dbfbb7074db10a92399722f Mon Sep 17 00:00:00 2001 From: Jordan Dominion Date: Tue, 29 Jul 2025 18:20:06 -0400 Subject: [PATCH] Add missing Dispose guard --- .../Components/InstanceFactory.cs | 153 +++++++++--------- 1 file changed, 80 insertions(+), 73 deletions(-) diff --git a/src/Tgstation.Server.Host/Components/InstanceFactory.cs b/src/Tgstation.Server.Host/Components/InstanceFactory.cs index 6bace0cd1a..67e2b53a52 100644 --- a/src/Tgstation.Server.Host/Components/InstanceFactory.cs +++ b/src/Tgstation.Server.Host/Components/InstanceFactory.cs @@ -315,102 +315,109 @@ namespace Tgstation.Server.Host.Components eventConsumer, dmbFactory, loggerFactory.CreateLogger()); - - var commandFactory = new CommandFactory(assemblyInformationProvider, engineManager, repoManager, databaseContextFactory, dmbFactory, metadata); - - var chatManager = chatFactory.CreateChatManager(commandFactory, metadata.ChatSettings); try { - var reattachInfoHandler = new SessionPersistor( - databaseContextFactory, - dmbFactory, - processExecutor, - loggerFactory.CreateLogger(), - metadata); + var commandFactory = new CommandFactory(assemblyInformationProvider, engineManager, repoManager, databaseContextFactory, dmbFactory, metadata); - var sessionControllerFactory = new SessionControllerFactory( - processExecutor, - engineManager, - topicClientFactory, - cryptographySuite, - assemblyInformationProvider, - gameIoManager, - diagnosticsIOManager, - chatManager, - networkPromptReaper, - platformIdentifier, - bridgeRegistrar, - serverPortProvider, - eventConsumer, - asyncDelayer, - dotnetDumpService, - metricFactory, - loggerFactory, - loggerFactory.CreateLogger(), - sessionConfiguration, - metadata); - - var watchdog = watchdogFactory.CreateWatchdog( - chatManager, - dmbFactory, - reattachInfoHandler, - sessionControllerFactory, - gameIoManager, - diagnosticsIOManager, - configuration, // watchdog doesn't need itself as an event consumer - remoteDeploymentManagerFactory, - metricFactory, - metadata, - metadata.DreamDaemonSettings!); + var chatManager = chatFactory.CreateChatManager(commandFactory, metadata.ChatSettings); try { - eventConsumer.SetWatchdog(watchdog); - commandFactory.SetWatchdog(watchdog); - - Instance? instance = null; - var dreamMaker = new DreamMaker( - engineManager, - gameIoManager, - configuration, - sessionControllerFactory, - eventConsumer, - chatManager, - processExecutor, + var reattachInfoHandler = new SessionPersistor( + databaseContextFactory, dmbFactory, - repoManager, - remoteDeploymentManagerFactory, + processExecutor, + loggerFactory.CreateLogger(), + metadata); + + var sessionControllerFactory = new SessionControllerFactory( + processExecutor, + engineManager, + topicClientFactory, + cryptographySuite, + assemblyInformationProvider, + gameIoManager, + diagnosticsIOManager, + chatManager, + networkPromptReaper, + platformIdentifier, + bridgeRegistrar, + serverPortProvider, + eventConsumer, asyncDelayer, + dotnetDumpService, metricFactory, - loggerFactory.CreateLogger(), + loggerFactory, + loggerFactory.CreateLogger(), sessionConfiguration, metadata); - instance = new Instance( - metadata, - repoManager, - engineManager, - dreamMaker, - watchdog, + var watchdog = watchdogFactory.CreateWatchdog( chatManager, - configuration, dmbFactory, - jobManager, - eventConsumer, + reattachInfoHandler, + sessionControllerFactory, + gameIoManager, + diagnosticsIOManager, + configuration, // watchdog doesn't need itself as an event consumer remoteDeploymentManagerFactory, - asyncDelayer, - loggerFactory.CreateLogger()); + metricFactory, + metadata, + metadata.DreamDaemonSettings!); + try + { + eventConsumer.SetWatchdog(watchdog); + commandFactory.SetWatchdog(watchdog); - return instance; + Instance? instance = null; + var dreamMaker = new DreamMaker( + engineManager, + gameIoManager, + configuration, + sessionControllerFactory, + eventConsumer, + chatManager, + processExecutor, + dmbFactory, + repoManager, + remoteDeploymentManagerFactory, + asyncDelayer, + metricFactory, + loggerFactory.CreateLogger(), + sessionConfiguration, + metadata); + + instance = new Instance( + metadata, + repoManager, + engineManager, + dreamMaker, + watchdog, + chatManager, + configuration, + dmbFactory, + jobManager, + eventConsumer, + remoteDeploymentManagerFactory, + asyncDelayer, + loggerFactory.CreateLogger()); + + return instance; + } + catch + { + await watchdog.DisposeAsync(); + throw; + } } catch { - await watchdog.DisposeAsync(); + await chatManager.DisposeAsync(); throw; } } catch { - await chatManager.DisposeAsync(); + engineManager.Dispose(); throw; } }