df3467a6ce
destCh was being written to by one goroutine and closed by another goroutine. This panic occurred in Travis: ``` === FAIL: drivers/docker TestDockerCoordinator_ConcurrentPulls (117.66s) === PAUSE TestDockerCoordinator_ConcurrentPulls === CONT TestDockerCoordinator_ConcurrentPulls panic: send on closed channel goroutine 5358 [running]: github.com/hashicorp/nomad/drivers/docker.dockerStatsCollector(0xc0003a4a20, 0xc0003a49c0, 0x3b9aca00) /home/travis/gopath/src/github.com/hashicorp/nomad/drivers/docker/stats.go:108 +0x167 created by github.com/hashicorp/nomad/drivers/docker.TestDriver_DockerStatsCollector /home/travis/gopath/src/github.com/hashicorp/nomad/drivers/docker/stats_test.go:33 +0x1ab ``` The 2 ways to fix this kind of error are to either (1) add extra coordination around multiple goroutines writing to a chan or (2) make it so only one goroutines writes to a chan. I implemented (2) first as it's simpler, but @notnoop pointed out since the same destCh in reused in the stats loop there's now a double close panic possible! So this implements (1) by adding a *usageSender struct for handling concurrent senders and closing. |
||
---|---|---|
.. | ||
docker | ||
exec | ||
java | ||
mock | ||
qemu | ||
rawexec | ||
rkt | ||
shared |