- clients: fix race introduced by commit 07db927; update tech doc

This commit is contained in:
Simon Zolin 2019-06-07 11:37:55 +03:00
parent 07db927246
commit 1fcb69d3a9
3 changed files with 6 additions and 6 deletions

View file

@ -526,7 +526,7 @@ Notes:
* If `use_global_settings` is true, then DNS responses for this client are processed and filtered using global settings. * If `use_global_settings` is true, then DNS responses for this client are processed and filtered using global settings.
* If `use_global_settings` is false, then the client-specific settings are used to override (disable) global settings. For example, if global setting `parental_enabled` is true, then per-client setting `parental_enabled:false` can disable Parental Control for this specific client. * If `use_global_settings` is false, then the client-specific settings are used to override (enable or disable) global settings.
### Get list of clients ### Get list of clients

View file

@ -89,13 +89,13 @@ func clientExists(ip string) bool {
} }
// Search for a client by IP // Search for a client by IP
func clientFind(ip string) (*Client, bool) { func clientFind(ip string) (Client, bool) {
clients.lock.Lock() clients.lock.Lock()
defer clients.lock.Unlock() defer clients.lock.Unlock()
c, ok := clients.ipIndex[ip] c, ok := clients.ipIndex[ip]
if ok { if ok {
return c, true return *c, true
} }
for _, c = range clients.list { for _, c = range clients.list {
@ -109,12 +109,12 @@ func clientFind(ip string) (*Client, bool) {
continue continue
} }
if ip == ipAddr.String() { if ip == ipAddr.String() {
return c, true return *c, true
} }
} }
} }
return nil, false return Client{}, false
} }
// Check if Client object's fields are correct // Check if Client object's fields are correct

2
dns.go
View file

@ -216,7 +216,7 @@ func generateServerConfig() dnsforward.ServerConfig {
// If a client has his own settings, apply them // If a client has his own settings, apply them
func applyClientSettings(clientAddr string, setts *dnsfilter.RequestFilteringSettings) { func applyClientSettings(clientAddr string, setts *dnsfilter.RequestFilteringSettings) {
c, ok := clientFind(clientAddr) c, ok := clientFind(clientAddr)
if !ok || c == nil || !c.UseOwnSettings { if !ok || !c.UseOwnSettings {
return return
} }