Fix: add mutex for fake ip pool

This commit is contained in:
Dreamacro 2019-05-23 23:27:29 +08:00
parent 89168e6c96
commit ad13ad8dba

View File

@ -3,6 +3,7 @@ package fakeip
import ( import (
"errors" "errors"
"net" "net"
"sync"
) )
// Pool is a implementation about fake ip generator without storage // Pool is a implementation about fake ip generator without storage
@ -10,10 +11,13 @@ type Pool struct {
max uint32 max uint32
min uint32 min uint32
offset uint32 offset uint32
mux *sync.Mutex
} }
// Get return a new fake ip // Get return a new fake ip
func (p *Pool) Get() net.IP { func (p *Pool) Get() net.IP {
p.mux.Lock()
defer p.mux.Unlock()
ip := uintToIP(p.min + p.offset) ip := uintToIP(p.min + p.offset)
p.offset = (p.offset + 1) % (p.max - p.min) p.offset = (p.offset + 1) % (p.max - p.min)
return ip return ip
@ -46,5 +50,6 @@ func New(ipnet *net.IPNet) (*Pool, error) {
return &Pool{ return &Pool{
min: min, min: min,
max: max, max: max,
mux: &sync.Mutex{},
}, nil }, nil
} }