mirror of
https://github.com/safing/portmaster
synced 2025-09-01 01:59:11 +00:00
Switch to flag based cache validation
This commit is contained in:
parent
d16810c0e9
commit
99c8c801eb
2 changed files with 25 additions and 29 deletions
|
@ -7,7 +7,6 @@ import (
|
|||
"os"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/miekg/dns"
|
||||
|
||||
|
@ -15,35 +14,25 @@ import (
|
|||
"github.com/safing/portmaster/network/netutils"
|
||||
)
|
||||
|
||||
const (
|
||||
gatewaysRecheck = 2 * time.Second
|
||||
nameserversRecheck = 2 * time.Second
|
||||
)
|
||||
|
||||
var (
|
||||
gateways = make([]net.IP, 0)
|
||||
gatewaysLock sync.Mutex
|
||||
gatewaysExpires = time.Now()
|
||||
gateways = make([]net.IP, 0)
|
||||
gatewaysLock sync.Mutex
|
||||
gatewaysNetworkChangedFlag = GetNetworkChangedFlag()
|
||||
|
||||
nameservers = make([]Nameserver, 0)
|
||||
nameserversLock sync.Mutex
|
||||
nameserversExpires = time.Now()
|
||||
nameservers = make([]Nameserver, 0)
|
||||
nameserversLock sync.Mutex
|
||||
nameserversNetworkChangedFlag = GetNetworkChangedFlag()
|
||||
)
|
||||
|
||||
// Gateways returns the currently active gateways.
|
||||
func Gateways() []net.IP {
|
||||
// locking
|
||||
gatewaysLock.Lock()
|
||||
defer gatewaysLock.Unlock()
|
||||
// cache
|
||||
if gatewaysExpires.After(time.Now()) {
|
||||
// Check if the network changed, if not, return cache.
|
||||
if !gatewaysNetworkChangedFlag.IsSet() {
|
||||
return gateways
|
||||
}
|
||||
// update cache expiry when finished
|
||||
defer func() {
|
||||
gatewaysExpires = time.Now().Add(gatewaysRecheck)
|
||||
}()
|
||||
// logic
|
||||
gatewaysNetworkChangedFlag.Refresh()
|
||||
|
||||
gateways = make([]net.IP, 0)
|
||||
var decoded []byte
|
||||
|
@ -119,17 +108,13 @@ func Gateways() []net.IP {
|
|||
|
||||
// Nameservers returns the currently active nameservers.
|
||||
func Nameservers() []Nameserver {
|
||||
// locking
|
||||
nameserversLock.Lock()
|
||||
defer nameserversLock.Unlock()
|
||||
// cache
|
||||
if nameserversExpires.After(time.Now()) {
|
||||
// Check if the network changed, if not, return cache.
|
||||
if !nameserversNetworkChangedFlag.IsSet() {
|
||||
return nameservers
|
||||
}
|
||||
// update cache expiry when finished
|
||||
defer func() {
|
||||
nameserversExpires = time.Now().Add(nameserversRecheck)
|
||||
}()
|
||||
nameserversNetworkChangedFlag.Refresh()
|
||||
|
||||
// logic
|
||||
// TODO: try:
|
||||
|
|
|
@ -9,12 +9,23 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/safing/portbase/log"
|
||||
"github.com/safing/portbase/utils"
|
||||
)
|
||||
|
||||
var (
|
||||
networkChangeCheckTrigger = make(chan struct{}, 1)
|
||||
networkChangeCheckTrigger = make(chan struct{}, 1)
|
||||
networkChangedFlagController = utils.NewFlagController()
|
||||
)
|
||||
|
||||
func GetNetworkChangedFlag() *utils.Flag {
|
||||
return networkChangedFlagController.NewFlag()
|
||||
}
|
||||
|
||||
func notifyOfNetworkChange() {
|
||||
networkChangedFlagController.NotifyAndReset()
|
||||
module.TriggerEvent(NetworkChangedEvent, nil)
|
||||
}
|
||||
|
||||
func triggerNetworkChangeCheck() {
|
||||
select {
|
||||
case networkChangeCheckTrigger <- struct{}{}:
|
||||
|
@ -82,7 +93,7 @@ serviceLoop:
|
|||
if trigger {
|
||||
triggerOnlineStatusInvestigation()
|
||||
}
|
||||
module.TriggerEvent(NetworkChangedEvent, nil)
|
||||
notifyOfNetworkChange()
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue