From 887b92bfe2b937c70c32b7bddde6e52bb760ae71 Mon Sep 17 00:00:00 2001 From: Neil Twigg Date: Tue, 19 Sep 2023 16:50:48 +0100 Subject: [PATCH] Fix data race in `setStreamAssignment` by ensuring JS lock held Signed-off-by: Neil Twigg --- server/stream.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/server/stream.go b/server/stream.go index d66f6062..196c1def 100644 --- a/server/stream.go +++ b/server/stream.go @@ -747,6 +747,7 @@ func (mset *stream) streamAssignment() *streamAssignment { func (mset *stream) setStreamAssignment(sa *streamAssignment) { var node RaftNode + var peers []string mset.mu.RLock() js := mset.js @@ -756,6 +757,7 @@ func (mset *stream) setStreamAssignment(sa *streamAssignment) { js.mu.RLock() if sa.Group != nil { node = sa.Group.node + peers = sa.Group.Peers } js.mu.RUnlock() } @@ -771,7 +773,7 @@ func (mset *stream) setStreamAssignment(sa *streamAssignment) { // Set our node. mset.node = node if mset.node != nil { - mset.node.UpdateKnownPeers(sa.Group.Peers) + mset.node.UpdateKnownPeers(peers) } // Setup our info sub here as well for all stream members. This is now by design.