- saving changes before repo reset.

This commit is contained in:
MapleWheels
2023-10-26 17:43:37 -04:00
parent e2695db011
commit 09ed9d60fb
3 changed files with 17 additions and 11 deletions
@@ -274,7 +274,8 @@ namespace Barotrauma
public void Stop() public void Stop()
{ {
PluginPackageManager.UnloadPlugins();
// unregister types // unregister types
foreach (Type type in AssemblyManager.GetAllLoadedACLs().SelectMany( foreach (Type type in AssemblyManager.GetAllLoadedACLs().SelectMany(
acl => acl.AssembliesTypes.Select(kvp => kvp.Value))) acl => acl.AssembliesTypes.Select(kvp => kvp.Value)))
@@ -337,7 +337,7 @@ public class AssemblyManager
OpsLockLoaded.EnterReadLock(); OpsLockLoaded.EnterReadLock();
try try
{ {
if (LoadedACLs.IsEmpty) if (!LoadedACLs.Any())
{ {
return ImmutableList<LoadedACL>.Empty; return ImmutableList<LoadedACL>.Empty;
} }
@@ -422,7 +422,7 @@ public class AssemblyManager
} }
catch (Exception e) catch (Exception e)
{ {
ModUtils.Logging.PrintError($"{nameof(AssemblyManager)}::{nameof(LoadAssemblyFromMemory)}() | Failed to compile and load assemblies for [ {compiledAssemblyName} / {friendlyName} ]! Details: {e.Message}"); ModUtils.Logging.PrintError($"{nameof(AssemblyManager)}::{nameof(LoadAssemblyFromMemory)}() | Failed to compile and load assemblies for [ {compiledAssemblyName} / {friendlyName} ]! Details: {e.Message} | {e.StackTrace}");
return AssemblyLoadingSuccessState.InvalidAssembly; return AssemblyLoadingSuccessState.InvalidAssembly;
} }
@@ -76,24 +76,29 @@ public class MemoryFileAssemblyContextLoader : AssemblyLoadContext
LoadFromAssemblyPath(sanitizedFilePath); LoadFromAssemblyPath(sanitizedFilePath);
} }
// on fail of any we're done because we assume that loaded files are related. This ACL needs to be unloaded and collected. // on fail of any we're done because we assume that loaded files are related. This ACL needs to be unloaded and collected.
catch (ArgumentNullException) catch (ArgumentNullException ane)
{ {
ModUtils.Logging.PrintError($"MemFileACL::{nameof(LoadFromFiles)}() | Error loading file path {sanitizedFilePath}. Details: {ane.Message} | {ane.StackTrace}");
return AssemblyLoadingSuccessState.BadFilePath; return AssemblyLoadingSuccessState.BadFilePath;
} }
catch (ArgumentException) catch (ArgumentException ae)
{ {
ModUtils.Logging.PrintError($"MemFileACL::{nameof(LoadFromFiles)}() | Error loading file path {sanitizedFilePath}. Details: {ae.Message} | {ae.StackTrace}");
return AssemblyLoadingSuccessState.BadFilePath; return AssemblyLoadingSuccessState.BadFilePath;
} }
catch (FileLoadException) catch (FileLoadException fle)
{ {
ModUtils.Logging.PrintError($"MemFileACL::{nameof(LoadFromFiles)}() | Error loading file path {sanitizedFilePath}. Details: {fle.Message} | {fle.StackTrace}");
return AssemblyLoadingSuccessState.CannotLoadFile; return AssemblyLoadingSuccessState.CannotLoadFile;
} }
catch (FileNotFoundException) catch (FileNotFoundException fnfe)
{ {
ModUtils.Logging.PrintError($"MemFileACL::{nameof(LoadFromFiles)}() | Error loading file path {sanitizedFilePath}. Details: {fnfe.Message} | {fnfe.StackTrace}");
return AssemblyLoadingSuccessState.NoAssemblyFound; return AssemblyLoadingSuccessState.NoAssemblyFound;
} }
catch (BadImageFormatException) catch (BadImageFormatException bife)
{ {
ModUtils.Logging.PrintError($"MemFileACL::{nameof(LoadFromFiles)}() | Error loading file path {sanitizedFilePath}. Details: {bife.Message} | {bife.StackTrace}");
return AssemblyLoadingSuccessState.InvalidAssembly; return AssemblyLoadingSuccessState.InvalidAssembly;
} }
catch (Exception e) catch (Exception e)
@@ -143,7 +148,7 @@ public class MemoryFileAssemblyContextLoader : AssemblyLoadContext
} }
var externAssemblyRefs = externFileAssemblyReferences is not null ? externFileAssemblyReferences.ToImmutableList() : ImmutableList<Assembly>.Empty; var externAssemblyRefs = externFileAssemblyReferences is not null ? externFileAssemblyReferences.ToImmutableList() : ImmutableList<Assembly>.Empty;
var externAssemblyNames = !externAssemblyRefs.IsEmpty ? externAssemblyRefs var externAssemblyNames = externAssemblyRefs.Any() ? externAssemblyRefs
.Where(a => a.FullName is not null) .Where(a => a.FullName is not null)
.Select(a => a.FullName).ToImmutableHashSet() .Select(a => a.FullName).ToImmutableHashSet()
: ImmutableHashSet<string>.Empty; : ImmutableHashSet<string>.Empty;
@@ -179,7 +184,7 @@ public class MemoryFileAssemblyContextLoader : AssemblyLoadContext
).ToList()); ).ToList());
ImmutableList<AssemblyManager.LoadedACL> loadedAcls = _assemblyManager.GetAllLoadedACLs().ToImmutableList(); ImmutableList<AssemblyManager.LoadedACL> loadedAcls = _assemblyManager.GetAllLoadedACLs().ToImmutableList();
if (!loadedAcls.IsEmpty) if (loadedAcls.Any())
{ {
// build metadata refs from ACL assemblies from files/disk. // build metadata refs from ACL assemblies from files/disk.
foreach (AssemblyManager.LoadedACL loadedAcl in loadedAcls) foreach (AssemblyManager.LoadedACL loadedAcl in loadedAcls)
@@ -205,7 +210,7 @@ public class MemoryFileAssemblyContextLoader : AssemblyLoadContext
// build metadata refs from in-memory images // build metadata refs from in-memory images
foreach (var loadedAcl in loadedAcls) foreach (var loadedAcl in loadedAcls)
{ {
if (loadedAcl.Acl.CompiledAssemblyImage is null || loadedAcl.Acl.CompiledAssemblyImage.Length == 0) if (loadedAcl?.Acl?.CompiledAssemblyImage is null || loadedAcl.Acl.CompiledAssemblyImage.Length == 0)
continue; continue;
metadataReferences.Add(MetadataReference.CreateFromImage(loadedAcl.Acl.CompiledAssemblyImage)); metadataReferences.Add(MetadataReference.CreateFromImage(loadedAcl.Acl.CompiledAssemblyImage));
} }