fix(launcher): harden updater crash recovery
This commit is contained in:
parent
2d2a5b5046
commit
1955ca8ab5
27 changed files with 2714 additions and 544 deletions
|
|
@ -627,6 +627,7 @@ public sealed class LauncherOrchestrator : ILauncherOrchestrator
|
|||
}
|
||||
|
||||
request.Cancellation.Dispose();
|
||||
request.Activity.StartCompleted.Set();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1201,11 +1202,16 @@ public sealed class LauncherOrchestrator : ILauncherOrchestrator
|
|||
private static void DisposeActivity(ManagedActivity activity)
|
||||
{
|
||||
activity.StartCancellation?.Cancel();
|
||||
activity.StartCompleted.Wait();
|
||||
activity.StartCancellation?.Dispose();
|
||||
activity.StartCancellation = null;
|
||||
|
||||
if (activity.Supervisor is not null)
|
||||
{
|
||||
// Disposal is a process-lifetime transaction: the shared update
|
||||
// lease remains held until Stop has observed the real child
|
||||
// terminal (including the post-kill wait).
|
||||
activity.Supervisor.Stop(TimeSpan.FromSeconds(5));
|
||||
if (activity.SupervisorStateHandler is not null)
|
||||
{
|
||||
activity.Supervisor.StateChanged -= activity.SupervisorStateHandler;
|
||||
|
|
@ -1216,6 +1222,7 @@ public sealed class LauncherOrchestrator : ILauncherOrchestrator
|
|||
}
|
||||
|
||||
ReleaseUpdateSessionLease(activity);
|
||||
activity.StartCompleted.Dispose();
|
||||
}
|
||||
|
||||
private static void ReleaseUpdateSessionLease(ManagedActivity activity)
|
||||
|
|
@ -1285,6 +1292,8 @@ public sealed class LauncherOrchestrator : ILauncherOrchestrator
|
|||
|
||||
public UpdateSessionBarrier.SessionLease? UpdateSessionLease;
|
||||
|
||||
public ManualResetEventSlim StartCompleted { get; } = new(false);
|
||||
|
||||
public object StatusReadGate { get; } = new();
|
||||
|
||||
public bool IsActive => State is not (
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue