From a168b6b05d04d85b0c0fa0a79a3adab94b9737db Mon Sep 17 00:00:00 2001 From: Maxime Date: Tue, 6 Jan 2026 15:53:22 +0000 Subject: [PATCH] feat: use contextual HandleCrash when possible --- pkg/kubelet/kuberuntime/kuberuntime_container.go | 4 ++-- pkg/kubelet/oom/oom_watcher_linux.go | 2 +- pkg/kubelet/pluginmanager/plugin_manager.go | 2 +- pkg/kubelet/prober/worker.go | 2 +- pkg/kubelet/volumemanager/volume_manager.go | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/kubelet/kuberuntime/kuberuntime_container.go b/pkg/kubelet/kuberuntime/kuberuntime_container.go index 8ef687b5309..681250f0e54 100644 --- a/pkg/kubelet/kuberuntime/kuberuntime_container.go +++ b/pkg/kubelet/kuberuntime/kuberuntime_container.go @@ -767,7 +767,7 @@ func (m *kubeGenericRuntimeManager) executePreStopHook(ctx context.Context, pod done := make(chan struct{}) go func() { defer close(done) - defer utilruntime.HandleCrash() + defer utilruntime.HandleCrashWithContext(ctx) if _, err := m.runner.Run(ctx, containerID, pod, containerSpec, containerSpec.Lifecycle.PreStop); err != nil { logger.Error(err, "PreStop hook failed", "pod", klog.KObj(pod), "podUID", pod.UID, "containerName", containerSpec.Name, "containerID", containerID.String()) @@ -923,7 +923,7 @@ func (m *kubeGenericRuntimeManager) killContainersWithSyncResult(ctx context.Con } for _, container := range runningPod.Containers { go func(container *kubecontainer.Container) { - defer utilruntime.HandleCrash() + defer utilruntime.HandleCrashWithContext(ctx) defer wg.Done() killContainerResult := kubecontainer.NewSyncResult(kubecontainer.KillContainer, container.Name) diff --git a/pkg/kubelet/oom/oom_watcher_linux.go b/pkg/kubelet/oom/oom_watcher_linux.go index c0344c52a33..08e0940995c 100644 --- a/pkg/kubelet/oom/oom_watcher_linux.go +++ b/pkg/kubelet/oom/oom_watcher_linux.go @@ -78,7 +78,7 @@ func (ow *realWatcher) Start(ctx context.Context, ref *v1.ObjectReference) error go func() { logger := klog.FromContext(ctx) - defer runtime.HandleCrash() + defer runtime.HandleCrashWithContext(ctx) for event := range outStream { if event.VictimContainerName == recordEventContainerName { diff --git a/pkg/kubelet/pluginmanager/plugin_manager.go b/pkg/kubelet/pluginmanager/plugin_manager.go index 754c30ba315..060664ee3de 100644 --- a/pkg/kubelet/pluginmanager/plugin_manager.go +++ b/pkg/kubelet/pluginmanager/plugin_manager.go @@ -107,7 +107,7 @@ type pluginManager struct { var _ PluginManager = &pluginManager{} func (pm *pluginManager) Run(ctx context.Context, sourcesReady config.SourcesReady, stopCh <-chan struct{}) { - defer runtime.HandleCrash() + defer runtime.HandleCrashWithContext(ctx) logger := klog.FromContext(ctx) diff --git a/pkg/kubelet/prober/worker.go b/pkg/kubelet/prober/worker.go index 2cbda7f20d0..35404eff758 100644 --- a/pkg/kubelet/prober/worker.go +++ b/pkg/kubelet/prober/worker.go @@ -214,7 +214,7 @@ func (w *worker) stop() { // Returns whether the worker should continue. func (w *worker) doProbe(ctx context.Context) (keepGoing bool) { defer func() { recover() }() // Actually eat panics (HandleCrash takes care of logging) - defer runtime.HandleCrash(func(_ interface{}) { keepGoing = true }) + defer runtime.HandleCrashWithContext(ctx, func(ctx context.Context, _ interface{}) { keepGoing = true }) logger := klog.FromContext(ctx) startTime := time.Now() diff --git a/pkg/kubelet/volumemanager/volume_manager.go b/pkg/kubelet/volumemanager/volume_manager.go index f0c58f3bad1..a36e0f72bad 100644 --- a/pkg/kubelet/volumemanager/volume_manager.go +++ b/pkg/kubelet/volumemanager/volume_manager.go @@ -298,7 +298,7 @@ func (e *VolumeAttachLimitExceededError) Error() string { func (vm *volumeManager) Run(ctx context.Context, sourcesReady config.SourcesReady) { logger := klog.FromContext(ctx) - defer runtime.HandleCrash() + defer runtime.HandleCrashWithContext(ctx) if vm.kubeClient != nil { // start informer for CSIDriver