You're going to need to provide more detail. Specifically, a minimal reproducer. There is no obvious explanation for the race given what you've already shown us so I suspect you've omitted an important fact.
On Sat, Jun 26, 2021 at 3:27 PM Rory Campbell-Lange <rory...@gmail.com> wrote: > I'm trying to work out why I have a data race problem (on go 1.15 and > 1.16). > > *SearchResults.Set is called from several goroutines. I am trying to avoid > concurrent access to its two maps using a mutex, but this isn't working. > > 108 type SearchResults struct { > 109 Boxes map[string][]Box > 110 seen map[string]bool > 111 sync.Mutex > 112 } > 113 > 114 // Set adds a new box to the search results map > 115 func (s *SearchResults) Set(b Box) { > 116 > 117 s.Lock() > 118 defer s.Unlock() > 119 > 120 if _, ok := s.seen[b.BoxID]; ok { // race problem > 121 return > 122 } > 123 > 124 if model := b.GetModel(); model != "" { > 125 s.Boxes[model] = append(s.Boxes[model], b) // race problem > 126 s.seen[b.BoxID] = true // race problem > 127 } > 128 } > > The data race report from go run -race <program> shows > > ================== > WARNING: DATA RACE > Write at 0x00c000012e70 by goroutine 16: > runtime.mapassign_faststr() > /home/rory/bin/go/src/runtime/map_faststr.go:202 +0x0 > main.(*SearchResults).Set() > /home/rory/src/go-cex/cexer.go:126 +0x345 > ... > Previous read at 0x00c000012e70 by goroutine 8: > runtime.mapaccess2_faststr() > /home/rory/bin/go/src/runtime/map_faststr.go:107 +0x0 > main.(*SearchResults).Set() > /home/rory/src/go-cex/cexer.go:120 +0xf6 > ... > ================== > WARNING: DATA RACE > Read at 0x00c000012ea0 by goroutine 8: > runtime.mapaccess1_faststr() > /home/rory/bin/go/src/runtime/map_faststr.go:12 +0x0 > main.(*SearchResults).Set() > /home/rory/src/go-cex/cexer.go:125 +0x195 > ... > Previous write at 0x00c000012ea0 by goroutine 16: > runtime.mapassign_faststr() > /home/rory/bin/go/src/runtime/map_faststr.go:202 +0x0 > main.(*SearchResults).Set() > /home/rory/src/go-cex/cexer.go:125 +0x2a7 > ... > > Advice gratefully received. > > Rory > > -- > 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. > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/CAPQX7QR1Evk7BzKAxwq3GKH%3DgiNb4YVs_ap7Q%2BUVC_OByoty2w%40mail.gmail.com > <https://groups.google.com/d/msgid/golang-nuts/CAPQX7QR1Evk7BzKAxwq3GKH%3DgiNb4YVs_ap7Q%2BUVC_OByoty2w%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > -- Kurtis Rader Caretaker of the exceptional canines Junior and Hank -- 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. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/CABx2%3DD9gQBBN_ckaThDAXspafqJ2_UNU2%3D0ORxtT5b6PYfnZaA%40mail.gmail.com.