Explorar el Código

wait: make WaitTime robust against deadline collisions

Anthony Romano hace 9 años
padre
commit
c3f069c9fc
Se han modificado 1 ficheros con 10 adiciones y 2 borrados
  1. 10 2
      pkg/wait/wait_time.go

+ 10 - 2
pkg/wait/wait_time.go

@@ -43,8 +43,16 @@ func (tl *timeList) Wait(deadline time.Time) <-chan struct{} {
 	tl.l.Lock()
 	tl.l.Lock()
 	defer tl.l.Unlock()
 	defer tl.l.Unlock()
 	ch := make(chan struct{}, 1)
 	ch := make(chan struct{}, 1)
-	// The given deadline SHOULD be unique.
-	tl.m[deadline.UnixNano()] = ch
+	// The given deadline SHOULD be unique but CI manages to get
+	// the same nano time in the unit tests.
+	nano := deadline.UnixNano()
+	for {
+		if tl.m[nano] == nil {
+			tl.m[nano] = ch
+			break
+		}
+		nano++
+	}
 	return ch
 	return ch
 }
 }