14458: Avoid panic by removing defer close()
authorPeter Amstutz <pamstutz@veritasgenetics.com>
Wed, 7 Nov 2018 20:53:08 +0000 (15:53 -0500)
committerPeter Amstutz <pamstutz@veritasgenetics.com>
Thu, 8 Nov 2018 16:09:11 +0000 (11:09 -0500)
Channels will be garbage collected when they go unreferenced.

Make the errors channel buffered to avoid lingering goroutines trying
to send on an unbuffered error channel with no reciever.

Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <pamstutz@veritasgenetics.com>

lib/controller/fed_collections.go

index b9cd20582951505fe7b43c07c490be9507535720..38cf409e6efc8cd4800eaccf244df7eb0e42adc2 100644 (file)
@@ -209,15 +209,12 @@ func (h *collectionFederatedRequestHandler) ServeHTTP(w http.ResponseWriter, req
        wg := sync.WaitGroup{}
        pdh := m[1]
        success := make(chan *http.Response)
-       errorChan := make(chan error)
+       errorChan := make(chan error, h.handler.Cluster.RequestLimits.GetMultiClusterRequestConcurrency())
 
        // use channel as a semaphore to limit the number of concurrent
        // requests at a time
        sem := make(chan bool, h.handler.Cluster.RequestLimits.GetMultiClusterRequestConcurrency())
 
-       defer close(errorChan)
-       defer close(success)
-       defer close(sem)
        defer cancelFunc()
 
        for remoteID := range h.handler.Cluster.RemoteClusters {