mirror of
https://github.com/v2fly/v2ray-core.git
synced 2024-06-11 02:10:44 +00:00
fix(router): panic caused by concurrent map read and write (#2678)
This commit is contained in:
parent
88b5b551c0
commit
87155bfc71
|
@ -4,6 +4,7 @@ import (
|
||||||
"regexp"
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
type weightScaler func(value, weight float64) float64
|
type weightScaler func(value, weight float64) float64
|
||||||
|
@ -26,10 +27,13 @@ type WeightManager struct {
|
||||||
cache map[string]float64
|
cache map[string]float64
|
||||||
scaler weightScaler
|
scaler weightScaler
|
||||||
defaultWeight float64
|
defaultWeight float64
|
||||||
|
mu sync.Mutex
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get gets the weight of specified tag
|
// Get gets the weight of specified tag
|
||||||
func (s *WeightManager) Get(tag string) float64 {
|
func (s *WeightManager) Get(tag string) float64 {
|
||||||
|
s.mu.Lock()
|
||||||
|
defer s.mu.Unlock()
|
||||||
weight, ok := s.cache[tag]
|
weight, ok := s.cache[tag]
|
||||||
if ok {
|
if ok {
|
||||||
return weight
|
return weight
|
||||||
|
|
Loading…
Reference in New Issue
Block a user