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"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/miekg/dns"
|
"github.com/miekg/dns"
|
||||||
|
|
||||||
|
@ -15,35 +14,25 @@ import (
|
||||||
"github.com/safing/portmaster/network/netutils"
|
"github.com/safing/portmaster/network/netutils"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
gatewaysRecheck = 2 * time.Second
|
|
||||||
nameserversRecheck = 2 * time.Second
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
var (
|
||||||
gateways = make([]net.IP, 0)
|
gateways = make([]net.IP, 0)
|
||||||
gatewaysLock sync.Mutex
|
gatewaysLock sync.Mutex
|
||||||
gatewaysExpires = time.Now()
|
gatewaysNetworkChangedFlag = GetNetworkChangedFlag()
|
||||||
|
|
||||||
nameservers = make([]Nameserver, 0)
|
nameservers = make([]Nameserver, 0)
|
||||||
nameserversLock sync.Mutex
|
nameserversLock sync.Mutex
|
||||||
nameserversExpires = time.Now()
|
nameserversNetworkChangedFlag = GetNetworkChangedFlag()
|
||||||
)
|
)
|
||||||
|
|
||||||
// Gateways returns the currently active gateways.
|
// Gateways returns the currently active gateways.
|
||||||
func Gateways() []net.IP {
|
func Gateways() []net.IP {
|
||||||
// locking
|
|
||||||
gatewaysLock.Lock()
|
gatewaysLock.Lock()
|
||||||
defer gatewaysLock.Unlock()
|
defer gatewaysLock.Unlock()
|
||||||
// cache
|
// Check if the network changed, if not, return cache.
|
||||||
if gatewaysExpires.After(time.Now()) {
|
if !gatewaysNetworkChangedFlag.IsSet() {
|
||||||
return gateways
|
return gateways
|
||||||
}
|
}
|
||||||
// update cache expiry when finished
|
gatewaysNetworkChangedFlag.Refresh()
|
||||||
defer func() {
|
|
||||||
gatewaysExpires = time.Now().Add(gatewaysRecheck)
|
|
||||||
}()
|
|
||||||
// logic
|
|
||||||
|
|
||||||
gateways = make([]net.IP, 0)
|
gateways = make([]net.IP, 0)
|
||||||
var decoded []byte
|
var decoded []byte
|
||||||
|
@ -119,17 +108,13 @@ func Gateways() []net.IP {
|
||||||
|
|
||||||
// Nameservers returns the currently active nameservers.
|
// Nameservers returns the currently active nameservers.
|
||||||
func Nameservers() []Nameserver {
|
func Nameservers() []Nameserver {
|
||||||
// locking
|
|
||||||
nameserversLock.Lock()
|
nameserversLock.Lock()
|
||||||
defer nameserversLock.Unlock()
|
defer nameserversLock.Unlock()
|
||||||
// cache
|
// Check if the network changed, if not, return cache.
|
||||||
if nameserversExpires.After(time.Now()) {
|
if !nameserversNetworkChangedFlag.IsSet() {
|
||||||
return nameservers
|
return nameservers
|
||||||
}
|
}
|
||||||
// update cache expiry when finished
|
nameserversNetworkChangedFlag.Refresh()
|
||||||
defer func() {
|
|
||||||
nameserversExpires = time.Now().Add(nameserversRecheck)
|
|
||||||
}()
|
|
||||||
|
|
||||||
// logic
|
// logic
|
||||||
// TODO: try:
|
// TODO: try:
|
||||||
|
|
|
@ -9,12 +9,23 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/safing/portbase/log"
|
"github.com/safing/portbase/log"
|
||||||
|
"github.com/safing/portbase/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
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() {
|
func triggerNetworkChangeCheck() {
|
||||||
select {
|
select {
|
||||||
case networkChangeCheckTrigger <- struct{}{}:
|
case networkChangeCheckTrigger <- struct{}{}:
|
||||||
|
@ -82,7 +93,7 @@ serviceLoop:
|
||||||
if trigger {
|
if trigger {
|
||||||
triggerOnlineStatusInvestigation()
|
triggerOnlineStatusInvestigation()
|
||||||
}
|
}
|
||||||
module.TriggerEvent(NetworkChangedEvent, nil)
|
notifyOfNetworkChange()
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue