https://play.golang.org/p/LadBqwgxxr _may_ be a fix, but the similarity to the discredited double check lock pattern is worrying.
On Wednesday, 14 December 2016 15:32:57 UTC+11, Dave Cheney wrote: > > Nope, it's not safe. > > https://play.golang.org/p/pcPdKixphL > > Run this program in a loop and it will panic eventually. > > On Wednesday, 14 December 2016 15:19:24 UTC+11, P Q wrote: >> >> func close_safe(c chan bool) { >> select { >> case <-c: >> default: >> close(c) >> } >> } >> >> Closing a channel onece more can be a controversial topic, sometimes it is >> useuful. >> I saw the code to close a closed channel. I thought the code looked nice >> at first, but could become errernous. >> >> Let's assume that two gorutines will try to close the channel and the >> channel has not been closed. At first, groutine 1 enters the default block. >> At this time, gorutine schedule changes so that groutine 2 gets the >> execution. and the groutine 2 enters the default block, and closes the >> channel. schedule changes, gorutine 1 restores its execution and will panic >> by closing the closed channel. >> >> Could this way happen? >> >> -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.