diff --git a/ttl/ttlworker/del.go b/ttl/ttlworker/del.go index d0bb651da8f41..eb86b1f3c6cf0 100644 --- a/ttl/ttlworker/del.go +++ b/ttl/ttlworker/del.go @@ -257,7 +257,7 @@ func (w *ttlDeleteWorker) loop() error { timer := time.NewTimer(w.retryBuffer.retryInterval) defer timer.Stop() - for w.status == workerStatusRunning { + for w.Status() == workerStatusRunning { select { case <-ctx.Done(): return nil diff --git a/ttl/ttlworker/scan.go b/ttl/ttlworker/scan.go index 4d9f7924cd9a6..be77fdd317a87 100644 --- a/ttl/ttlworker/scan.go +++ b/ttl/ttlworker/scan.go @@ -212,21 +212,24 @@ func (w *ttlScanWorker) Idle() bool { func (w *ttlScanWorker) Schedule(task *ttlScanTask) error { w.Lock() - defer w.Unlock() if w.status != workerStatusRunning { + w.Unlock() return errors.New("worker is not running") } if w.curTaskResult != nil { + w.Unlock() return errors.New("the result of previous task has not been polled") } if w.curTask != nil { + w.Unlock() return errors.New("a task is running") } w.curTask = task w.curTaskResult = nil + w.Unlock() w.baseWorker.ch <- task return nil } @@ -250,7 +253,7 @@ func (w *ttlScanWorker) PollTaskResult() (*ttlScanTaskExecResult, bool) { func (w *ttlScanWorker) loop() error { ctx := w.baseWorker.ctx - for w.status == workerStatusRunning { + for w.Status() == workerStatusRunning { select { case <-ctx.Done(): return nil