From 22cd13b3702753b4b28a731a7d8a5c4794307a16 Mon Sep 17 00:00:00 2001 From: Ye Sijun Date: Wed, 20 Apr 2022 13:47:09 +0800 Subject: [PATCH] fix nil pointer panic for monitor Signed-off-by: Ye Sijun --- runtime/restart/monitor/monitor.go | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/runtime/restart/monitor/monitor.go b/runtime/restart/monitor/monitor.go index d1f055217..5a8e5622d 100644 --- a/runtime/restart/monitor/monitor.go +++ b/runtime/restart/monitor/monitor.go @@ -214,21 +214,30 @@ func (m *monitor) monitor(ctx context.Context) ([]change, error) { } var changes []change for _, c := range containers { + var ( + task containerd.Task + status containerd.Status + err error + ) labels, err := c.Labels(ctx) if err != nil { return nil, err } desiredStatus := containerd.ProcessStatus(labels[restart.StatusLabel]) - task, err := c.Task(ctx, nil) - if err != nil && desiredStatus == containerd.Stopped { - continue + if task, err = c.Task(ctx, nil); err == nil { + if status, err = task.Status(ctx); err == nil { + if desiredStatus == status.Status { + continue + } + } } - status, err := task.Status(ctx) - if err != nil && desiredStatus == containerd.Stopped { - continue - } - if desiredStatus == status.Status { - continue + + // Task or Status return error, only desired to stop + if err != nil { + logrus.WithError(err).Error("monitor") + if desiredStatus != containerd.Stopped { + continue + } } switch desiredStatus {