mirror of
https://github.com/goatcorp/Dalamud.git
synced 2025-12-12 18:27:23 +01:00
fix: correctly use dependency order to unload, declare all plugin services as deps to PM
This commit is contained in:
parent
f032adb155
commit
48611dcb74
1 changed files with 1 additions and 34 deletions
|
|
@ -126,26 +126,6 @@ internal static class ServiceManager
|
||||||
|
|
||||||
var dependencyServicesMap = new Dictionary<Type, List<Type>>();
|
var dependencyServicesMap = new Dictionary<Type, List<Type>>();
|
||||||
var getAsyncTaskMap = new Dictionary<Type, Task>();
|
var getAsyncTaskMap = new Dictionary<Type, Task>();
|
||||||
|
|
||||||
// fill getAsyncTaskMap with services that were provided
|
|
||||||
lock (LoadedServices)
|
|
||||||
{
|
|
||||||
foreach (var loadedService in LoadedServices)
|
|
||||||
{
|
|
||||||
var getTask = (Task)typeof(Service<>)
|
|
||||||
.MakeGenericType(loadedService)
|
|
||||||
.InvokeMember(
|
|
||||||
"GetAsync",
|
|
||||||
BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.Public,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null);
|
|
||||||
|
|
||||||
Debug.Assert(getTask != null, "Provided service getTask was null");
|
|
||||||
|
|
||||||
getAsyncTaskMap[typeof(Service<>).MakeGenericType(loadedService)] = getTask;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var serviceType in Assembly.GetExecutingAssembly().GetTypes())
|
foreach (var serviceType in Assembly.GetExecutingAssembly().GetTypes())
|
||||||
{
|
{
|
||||||
|
|
@ -218,16 +198,11 @@ internal static class ServiceManager
|
||||||
|
|
||||||
if (depResolveTask == null && (depServiceKind.HasFlag(ServiceKind.EarlyLoadedService) || depServiceKind.HasFlag(ServiceKind.BlockingEarlyLoadedService)))
|
if (depResolveTask == null && (depServiceKind.HasFlag(ServiceKind.EarlyLoadedService) || depServiceKind.HasFlag(ServiceKind.BlockingEarlyLoadedService)))
|
||||||
{
|
{
|
||||||
Log.Information("{Type}: {Dependency} has no resolver task, is it early loaded or blocking early loaded?", serviceType.FullName!, dependency.FullName!);
|
Log.Error("{Type}: {Dependency} has no resolver task, is it early loaded or blocking early loaded?", serviceType.FullName!, dependency.FullName!);
|
||||||
Debug.Assert(false, $"No resolver for dependent service {dependency.FullName}");
|
Debug.Assert(false, $"No resolver for dependent service {dependency.FullName}");
|
||||||
}
|
}
|
||||||
else if (depResolveTask is { Status: TaskStatus.Created })
|
|
||||||
{
|
|
||||||
depResolveTask.Start();
|
|
||||||
}
|
|
||||||
else if (depResolveTask is { IsCompleted: false })
|
else if (depResolveTask is { IsCompleted: false })
|
||||||
{
|
{
|
||||||
Log.Verbose("{Type} waiting for {Dependency}", serviceType.FullName!, dependency.FullName!);
|
|
||||||
hasDeps = false;
|
hasDeps = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -331,14 +306,6 @@ internal static class ServiceManager
|
||||||
null,
|
null,
|
||||||
null))!
|
null))!
|
||||||
.Select(x => x.GetGenericArguments()[0]).ToList();
|
.Select(x => x.GetGenericArguments()[0]).ToList();
|
||||||
|
|
||||||
/*
|
|
||||||
Log.Verbose("=> Deps for {Type}", serviceType.FullName!);
|
|
||||||
foreach (var dependencyService in dependencyServicesMap[serviceType])
|
|
||||||
{
|
|
||||||
Log.Verbose("\t\t=> {Type}", dependencyService.FullName!);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
allToUnload.Add(serviceType);
|
allToUnload.Add(serviceType);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue