From 34bb2a7ad472b952ad59a6d7b2e9970ca949badb Mon Sep 17 00:00:00 2001 From: goat Date: Mon, 22 May 2023 21:24:17 +0200 Subject: [PATCH] fix: don't handle scoped services in ServiceManager.UnloadAllServices() Fixes a deadlock while unloading --- Dalamud/ServiceManager.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Dalamud/ServiceManager.cs b/Dalamud/ServiceManager.cs index 2b96ae5ea..c13d39f4c 100644 --- a/Dalamud/ServiceManager.cs +++ b/Dalamud/ServiceManager.cs @@ -309,6 +309,13 @@ internal static class ServiceManager if (!serviceType.IsAssignableTo(typeof(IServiceType))) continue; + // Scoped services shall never be unloaded here. + // Their lifetime must be managed by the IServiceScope that owns them. If it leaks, it's their fault. + if (serviceType.GetServiceKind() == ServiceKind.ScopedService) + continue; + + Log.Verbose("Calling GetDependencyServices for '{ServiceName}'", serviceType.FullName!); + dependencyServicesMap[serviceType] = ((List)typeof(Service<>) .MakeGenericType(serviceType)