| 3560 | } |
| 3561 | |
| 3562 | func (m *Service) waitAndForceStopRun(ctx context.Context, sessionID string, reason StopReason) error { |
| 3563 | if m.cancelGracePeriod > 0 { |
| 3564 | timer := time.NewTimer(m.cancelGracePeriod) |
| 3565 | defer timer.Stop() |
| 3566 | |
| 3567 | select { |
| 3568 | case <-timer.C: |
| 3569 | case <-ctx.Done(): |
| 3570 | return fmt.Errorf("task: wait for force-stop grace period on session %q: %w", sessionID, ctx.Err()) |
| 3571 | } |
| 3572 | } |
| 3573 | if err := m.sessions.ForceTaskStop(ctx, sessionID, reason); err != nil { |
| 3574 | return fmt.Errorf("task: force stop session %q: %w", sessionID, err) |
| 3575 | } |
| 3576 | return nil |
| 3577 | } |
| 3578 | |
| 3579 | func recoverySessionStateRequiresCooperativeStop(state string) bool { |
| 3580 | switch strings.TrimSpace(state) { |