From 7d8ec5f208c645fef71e2b1fd9ce1f891edfda45 Mon Sep 17 00:00:00 2001 From: Keuin Date: Fri, 16 Sep 2022 20:26:59 +0800 Subject: Bugfix: Ctrl-C won't stop the task. --- common/errors.go | 8 ++++++++ recording/runner.go | 18 ++++++++++-------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/common/errors.go b/common/errors.go index fa2d492..62899c1 100644 --- a/common/errors.go +++ b/common/errors.go @@ -42,6 +42,10 @@ func (e *RecoverableTaskError) Error() string { return fmt.Sprintf("%v: %v", e.message, e.err) } +func (e *RecoverableTaskError) Unwrap() error { + return e.err +} + func NewRecoverableTaskError(message string, err error) error { return &RecoverableTaskError{message: message, err: err} } @@ -55,6 +59,10 @@ func (e *UnrecoverableTaskError) Error() string { return fmt.Sprintf("%v: %v", e.message, e.err) } +func (e *UnrecoverableTaskError) Unwrap() error { + return e.err +} + func NewUnrecoverableTaskError(message string, err error) error { return &UnrecoverableTaskError{message: message, err: err} } diff --git a/recording/runner.go b/recording/runner.go index 8c1e047..f12e9cd 100644 --- a/recording/runner.go +++ b/recording/runner.go @@ -40,7 +40,11 @@ func (t *RunningTask) runTaskWithAutoRestart() { t.status = StRunning loop: for { - switch err := tryRunTask(t); err.(type) { + err := tryRunTask(t) + if errors.Is(err, context.Canceled) { + break + } + switch err.(type) { case nil: t.logger.Info("Task stopped: %v", t.String()) case *common.RecoverableTaskError: @@ -49,9 +53,7 @@ loop: } t.status = StRestarting default: - if !errors.Is(err, context.Canceled) { - t.logger.Error("Cannot recover from error: %v", err) - } + t.logger.Error("Cannot recover from error: %v", err) break loop } } @@ -123,6 +125,10 @@ func tryRunTask(t *RunningTask) error { liveStatusChecker, t.logger, ) + // the context is cancelled + if errors.Is(err, context.Canceled) { + break loop + } switch err.(type) { case nil: // live is started, stop watcher loop and start the recorder @@ -139,10 +145,6 @@ func tryRunTask(t *RunningTask) error { t.logger.Error("Error occurred in live status watcher: %v", err) default: run = false - // the task is being cancelled - if errors.Is(err, context.Canceled) { - break loop - } // unknown error type, this should not happen t.logger.Error("Unexpected type of error in watcher: %v", err) } -- cgit v1.2.3