🔒 feat(setting): add mutex for GroupGroupRatio to ensure thread safety

This commit is contained in:
CaIon
2025-06-13 01:08:38 +08:00
parent a28ab3628a
commit 9b659ed4f1

View File

@@ -14,11 +14,14 @@ var groupRatio = map[string]float64{
} }
var groupRatioMutex sync.RWMutex var groupRatioMutex sync.RWMutex
var GroupGroupRatio = map[string]map[string]float64{ var (
"vip": { GroupGroupRatio = map[string]map[string]float64{
"edit_this": 0.9, "vip": {
}, "edit_this": 0.9,
} },
}
groupGroupRatioMutex sync.RWMutex
)
func GetGroupRatioCopy() map[string]float64 { func GetGroupRatioCopy() map[string]float64 {
groupRatioMutex.RLock() groupRatioMutex.RLock()
@@ -71,6 +74,9 @@ func GetGroupRatio(name string) float64 {
} }
func GetGroupGroupRatio(group, name string) (float64, bool) { func GetGroupGroupRatio(group, name string) (float64, bool) {
groupGroupRatioMutex.RLock()
defer groupGroupRatioMutex.RUnlock()
gp, ok := GroupGroupRatio[group] gp, ok := GroupGroupRatio[group]
if !ok { if !ok {
return -1, false return -1, false
@@ -83,6 +89,9 @@ func GetGroupGroupRatio(group, name string) (float64, bool) {
} }
func GroupGroupRatio2JSONString() string { func GroupGroupRatio2JSONString() string {
groupGroupRatioMutex.RLock()
defer groupGroupRatioMutex.RUnlock()
jsonBytes, err := json.Marshal(GroupGroupRatio) jsonBytes, err := json.Marshal(GroupGroupRatio)
if err != nil { if err != nil {
common.SysError("error marshalling group-group ratio: " + err.Error()) common.SysError("error marshalling group-group ratio: " + err.Error())
@@ -91,6 +100,9 @@ func GroupGroupRatio2JSONString() string {
} }
func UpdateGroupGroupRatioByJSONString(jsonStr string) error { func UpdateGroupGroupRatioByJSONString(jsonStr string) error {
groupGroupRatioMutex.Lock()
defer groupGroupRatioMutex.Unlock()
GroupGroupRatio = make(map[string]map[string]float64) GroupGroupRatio = make(map[string]map[string]float64)
return json.Unmarshal([]byte(jsonStr), &GroupGroupRatio) return json.Unmarshal([]byte(jsonStr), &GroupGroupRatio)
} }