This is an automated email from the ASF dual-hosted git repository.

dinglei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/rocketmq-client-go.git


The following commit(s) were added to refs/heads/master by this push:
     new 4de354a  add lock to protect data race (#1088)
4de354a is described below

commit 4de354a4c07de88805c6b4b13ed13d921136861f
Author: wenxuwan <[email protected]>
AuthorDate: Mon Sep 4 19:20:25 2023 +0800

    add lock to protect data race (#1088)
---
 consumer/push_consumer.go |  2 ++
 internal/model.go         | 12 ++++++++++++
 2 files changed, 14 insertions(+)

diff --git a/consumer/push_consumer.go b/consumer/push_consumer.go
index a5b17f6..2799841 100644
--- a/consumer/push_consumer.go
+++ b/consumer/push_consumer.go
@@ -502,7 +502,9 @@ func (pc *pushConsumer) messageQueueChanged(topic string, 
mqAll, mqDivided []*pr
                rlog.LogKeyValueChangedFrom: data.SubVersion,
                rlog.LogKeyValueChangedTo:   newVersion,
        })
+       data.Lock()
        data.SubVersion = newVersion
+       data.Unlock()
 
        // TODO: optimize
        count := 0
diff --git a/internal/model.go b/internal/model.go
index 36e06a1..3cc59d0 100644
--- a/internal/model.go
+++ b/internal/model.go
@@ -25,6 +25,7 @@ import (
        "sort"
        "strconv"
        "strings"
+       "sync"
 
        "github.com/apache/rocketmq-client-go/v2/internal/utils"
        "github.com/apache/rocketmq-client-go/v2/primitive"
@@ -60,9 +61,20 @@ type SubscriptionData struct {
        Codes           utils.Set `json:"codeSet"`
        SubVersion      int64     `json:"subVersion"`
        ExpType         string    `json:"expressionType"`
+       mux             sync.RWMutex
+}
+
+func (sd *SubscriptionData) Lock() {
+       sd.mux.Lock()
+}
+
+func (sd *SubscriptionData) Unlock() {
+       sd.mux.Unlock()
 }
 
 func (sd *SubscriptionData) Clone() *SubscriptionData {
+       sd.mux.RLock()
+       defer sd.mux.RUnlock()
        cloned := &SubscriptionData{
                ClassFilterMode: sd.ClassFilterMode,
                Topic:           sd.Topic,

Reply via email to