diff --git a/src/restic/worker/pool_test.go b/src/restic/worker/pool_test.go
index 16b285702..78cda9cd7 100644
--- a/src/restic/worker/pool_test.go
+++ b/src/restic/worker/pool_test.go
@@ -94,29 +94,32 @@ var errCancelled = errors.New("cancelled")
 
 type Job struct {
 	suc chan struct{}
-	d   time.Duration
-}
-
-func wait(job worker.Job, done <-chan struct{}) (interface{}, error) {
-	j := job.Data.(Job)
-	select {
-	case j.suc <- struct{}{}:
-		return time.Now(), nil
-	case <-time.After(j.d):
-		return time.Now(), nil
-	case <-done:
-		return nil, errCancelled
-	}
 }
 
 func TestPoolCancel(t *testing.T) {
-	jobCh, resCh, p := newBufferedPool(20, concurrency, wait)
+	barrier := make(chan struct{})
 
-	suc := make(chan struct{}, 1)
-	for i := 0; i < 20; i++ {
-		jobCh <- worker.Job{Data: Job{suc: suc, d: time.Second}}
+	wait := func(job worker.Job, done <-chan struct{}) (interface{}, error) {
+		j := job.Data.(Job)
+
+		<-barrier
+
+		select {
+		case j.suc <- struct{}{}:
+			return time.Now(), nil
+		case <-done:
+			return nil, errCancelled
+		}
 	}
 
+	jobCh, resCh, p := newBufferedPool(20, concurrency, wait)
+
+	suc := make(chan struct{})
+	for i := 0; i < 20; i++ {
+		jobCh <- worker.Job{Data: Job{suc: suc}}
+	}
+
+	close(barrier)
 	<-suc
 	p.Cancel()
 	p.Wait()