From 2c4401db8c72b3b6b2e88df7aada2bb1d5e1bc85 Mon Sep 17 00:00:00 2001 From: Matt Jaffee Date: Mon, 10 Dec 2018 15:48:25 -0600 Subject: [PATCH] hopefully fix data race --- gossip/gossip.go | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/gossip/gossip.go b/gossip/gossip.go index 8f19203f5..491e14cf2 100644 --- a/gossip/gossip.go +++ b/gossip/gossip.go @@ -333,15 +333,30 @@ func newEventReceiver(logger *log.Logger, papi *pilosa.API) *eventReceiver { } func (g *eventReceiver) NotifyJoin(n *memberlist.Node) { - g.ch <- memberlist.NodeEvent{Event: memberlist.NodeJoin, Node: n} + // copy node to avoid data race + n2 := *n + n2.Meta = make([]byte, len(n.Meta)) + copy(n2.Meta, n.Meta) + + g.ch <- memberlist.NodeEvent{Event: memberlist.NodeJoin, Node: &n2} } func (g *eventReceiver) NotifyLeave(n *memberlist.Node) { - g.ch <- memberlist.NodeEvent{Event: memberlist.NodeLeave, Node: n} + // copy node to avoid data race + n2 := *n + n2.Meta = make([]byte, len(n.Meta)) + copy(n2.Meta, n.Meta) + + g.ch <- memberlist.NodeEvent{Event: memberlist.NodeLeave, Node: &n2} } func (g *eventReceiver) NotifyUpdate(n *memberlist.Node) { - g.ch <- memberlist.NodeEvent{Event: memberlist.NodeUpdate, Node: n} + // copy node to avoid data race + n2 := *n + n2.Meta = make([]byte, len(n.Meta)) + copy(n2.Meta, n.Meta) + + g.ch <- memberlist.NodeEvent{Event: memberlist.NodeUpdate, Node: &n2} } func (g *eventReceiver) listen() {