safing-portmaster/spn/sluice/sluices.go

47 lines
759 B
Go

package sluice
import "sync"
var (
sluices = make(map[string]*Sluice)
sluicesLock sync.RWMutex
)
func getSluice(network string) (s *Sluice, ok bool) {
sluicesLock.RLock()
defer sluicesLock.RUnlock()
s, ok = sluices[network]
return
}
func addSluice(s *Sluice) {
sluicesLock.Lock()
defer sluicesLock.Unlock()
sluices[s.network] = s
}
func removeSluice(network string) {
sluicesLock.Lock()
defer sluicesLock.Unlock()
delete(sluices, network)
}
func copySluices() map[string]*Sluice {
sluicesLock.Lock()
defer sluicesLock.Unlock()
copied := make(map[string]*Sluice, len(sluices))
for k, v := range sluices {
copied[k] = v
}
return copied
}
func stopAllSluices() {
for _, sluice := range copySluices() {
sluice.abandon()
}
}