diff --git a/pkg/tools/heal/liveness_check.go b/pkg/tools/heal/liveness_check.go index 87d0545a..86ca5171 100644 --- a/pkg/tools/heal/liveness_check.go +++ b/pkg/tools/heal/liveness_check.go @@ -36,20 +36,24 @@ const ( intervalFactor = 0.85 ) -func waitForResponses(responseCh <-chan error) bool { +func waitForResponses(ctx context.Context, responseCh <-chan error) bool { respCount := cap(responseCh) success := true for { - resp, ok := <-responseCh - if !ok { + select { + case <-ctx.Done(): return false - } - if resp != nil { - success = false - } - respCount-- - if respCount == 0 { - return success + case resp, ok := <-responseCh: + if !ok { + return false + } + if resp != nil { + success = false + } + respCount-- + if respCount == 0 { + return success + } } } } @@ -103,20 +107,18 @@ func doPing( } defer func() { _ = subscription.Unsubscribe() }() - for { - select { - case <-deadlineCtx.Done(): - return - case rawMsg := <-notifCh: - if msg, ok := rawMsg.(*ping.PingFinishedEvent); ok { - if msg.ReplyCount == 0 { - err = errors.New("No packets received") - logger.Errorf(err.Error()) - responseCh <- err - return - } - responseCh <- nil + select { + case <-deadlineCtx.Done(): + return + case rawMsg := <-notifCh: + if msg, ok := rawMsg.(*ping.PingFinishedEvent); ok { + if msg.ReplyCount == 0 { + err = errors.New("No packets received") + logger.Errorf(err.Error()) + responseCh <- err + return } + responseCh <- nil } } } @@ -169,6 +171,6 @@ func VPPLivenessCheck(vppConn vpphelper.Connection) func(deadlineCtx context.Con } // Waiting for all ping results. If at least one fails - return false - return waitForResponses(responseCh) + return waitForResponses(deadlineCtx, responseCh) } }