Procházet zdrojové kódy

Fix goroutine leak in deadline

If the deadline timed out then the worker goroutine might have been
leaked trying to write to `result` which had no readers.
Evan Huus před 6 roky
rodič
revize
eadf0b0259
1 změnil soubory, kde provedl 5 přidání a 1 odebrání
  1. 5 1
      deadline/deadline.go

+ 5 - 1
deadline/deadline.go

@@ -32,7 +32,11 @@ func (d *Deadline) Run(work func(<-chan struct{}) error) error {
 	stopper := make(chan struct{})
 
 	go func() {
-		result <- work(stopper)
+		value := work(stopper)
+		select {
+		case result <- value:
+		case <-stopper:
+		}
 	}()
 
 	select {