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,