From 9b659ed4f125ba5e9de37817ae2f5eb5fb23b52d Mon Sep 17 00:00:00 2001 From: CaIon <1808837298@qq.com> Date: Fri, 13 Jun 2025 01:08:38 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=92=20feat(setting):=20add=20mutex=20f?= =?UTF-8?q?or=20GroupGroupRatio=20to=20ensure=20thread=20safety?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- setting/group_ratio.go | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/setting/group_ratio.go b/setting/group_ratio.go index 1fe523e4..28dbd167 100644 --- a/setting/group_ratio.go +++ b/setting/group_ratio.go @@ -14,11 +14,14 @@ var groupRatio = map[string]float64{ } var groupRatioMutex sync.RWMutex -var GroupGroupRatio = map[string]map[string]float64{ - "vip": { - "edit_this": 0.9, - }, -} +var ( + GroupGroupRatio = map[string]map[string]float64{ + "vip": { + "edit_this": 0.9, + }, + } + groupGroupRatioMutex sync.RWMutex +) func GetGroupRatioCopy() map[string]float64 { groupRatioMutex.RLock() @@ -71,6 +74,9 @@ func GetGroupRatio(name string) float64 { } func GetGroupGroupRatio(group, name string) (float64, bool) { + groupGroupRatioMutex.RLock() + defer groupGroupRatioMutex.RUnlock() + gp, ok := GroupGroupRatio[group] if !ok { return -1, false @@ -83,6 +89,9 @@ func GetGroupGroupRatio(group, name string) (float64, bool) { } func GroupGroupRatio2JSONString() string { + groupGroupRatioMutex.RLock() + defer groupGroupRatioMutex.RUnlock() + jsonBytes, err := json.Marshal(GroupGroupRatio) if err != nil { common.SysError("error marshalling group-group ratio: " + err.Error()) @@ -91,6 +100,9 @@ func GroupGroupRatio2JSONString() string { } func UpdateGroupGroupRatioByJSONString(jsonStr string) error { + groupGroupRatioMutex.Lock() + defer groupGroupRatioMutex.Unlock() + GroupGroupRatio = make(map[string]map[string]float64) return json.Unmarshal([]byte(jsonStr), &GroupGroupRatio) }