Skip to content

Commit

Permalink
Fix for data race in memstore.LoadNextMsg (#4552)
Browse files Browse the repository at this point in the history
  • Loading branch information
wallyqs committed Sep 18, 2023
2 parents 6f38056 + 32021f6 commit fc51af9
Showing 1 changed file with 3 additions and 2 deletions.
5 changes: 3 additions & 2 deletions server/memstore.go
Expand Up @@ -913,8 +913,8 @@ func (ms *memStore) LoadLastMsg(subject string, smp *StoreMsg) (*StoreMsg, error
// LoadNextMsg will find the next message matching the filter subject starting at the start sequence.
// The filter subject can be a wildcard.
func (ms *memStore) LoadNextMsg(filter string, wc bool, start uint64, smp *StoreMsg) (*StoreMsg, uint64, error) {
ms.mu.RLock()
defer ms.mu.RUnlock()
ms.mu.Lock()
defer ms.mu.Unlock()

if start < ms.state.FirstSeq {
start = ms.state.FirstSeq
Expand Down Expand Up @@ -1063,6 +1063,7 @@ func (ms *memStore) removeSeqPerSubject(subj string, seq uint64) {
}

// Will recalulate the first sequence for this subject in this block.
// Lock should be held.
func (ms *memStore) recalculateFirstForSubj(subj string, startSeq uint64, ss *SimpleState) {
for tseq := startSeq + 1; tseq <= ss.Last; tseq++ {
if sm := ms.msgs[tseq]; sm != nil && sm.subj == subj {
Expand Down

0 comments on commit fc51af9

Please sign in to comment.