fix(plugins): close LA5 ownership races
This commit is contained in:
parent
fbe9c8a288
commit
f820eb258d
14 changed files with 467 additions and 107 deletions
|
|
@ -7,17 +7,17 @@ namespace AcDream.Core.Plugins;
|
|||
/// Outcome of a plugin load attempt.
|
||||
/// <para>On success, <see cref="Plugin"/> is the instantiated plugin, <see cref="LoadContext"/>
|
||||
/// owns its assembly, and <see cref="Error"/> is null.</para>
|
||||
/// <para>On failure, <see cref="Plugin"/> and <see cref="LoadContext"/> are null,
|
||||
/// <see cref="Error"/> describes what went wrong, and
|
||||
/// <see cref="ReleasedLoadContext"/> weakly observes any collectible context
|
||||
/// that was already released during rollback.</para>
|
||||
/// <para>On failure, <see cref="Error"/> describes what went wrong. A partial
|
||||
/// <see cref="Plugin"/> and/or <see cref="LoadContext"/> may still be present;
|
||||
/// the caller owns their cleanup. The loader never requests collectible unload
|
||||
/// itself because the session must first roll back host registrations.</para>
|
||||
/// </summary>
|
||||
public sealed record LoadedPlugin(
|
||||
PluginManifest Manifest,
|
||||
IAcDreamPlugin? Plugin,
|
||||
AssemblyLoadContext? LoadContext,
|
||||
Exception? Error,
|
||||
WeakReference? ReleasedLoadContext = null)
|
||||
Exception? Error)
|
||||
{
|
||||
public bool Success => Plugin is not null && Error is null;
|
||||
public bool Success =>
|
||||
Plugin is not null && LoadContext is not null && Error is null;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue