Remove unnecessary state variable.

This commit is contained in:
Joachim Bauch 2024-02-22 14:13:05 +01:00
parent 29b0b06f6d
commit 45be0ad2fd
No known key found for this signature in database
GPG key ID: 77C1D22D53E15F02

View file

@ -43,8 +43,7 @@ const (
type DnsMonitorCallback = func(entry *DnsMonitorEntry, all []net.IP, add []net.IP, keep []net.IP, remove []net.IP) type DnsMonitorCallback = func(entry *DnsMonitorEntry, all []net.IP, add []net.IP, keep []net.IP, remove []net.IP)
type DnsMonitorEntry struct { type DnsMonitorEntry struct {
removing atomic.Bool entry atomic.Pointer[dnsMonitorEntry]
entry *dnsMonitorEntry
url string url string
callback DnsMonitorCallback callback DnsMonitorCallback
} }
@ -222,14 +221,15 @@ func (m *DnsMonitor) Add(target string, callback DnsMonitorCallback) (*DnsMonito
} }
m.hostnames[hostname] = entry m.hostnames[hostname] = entry
} }
e.entry = entry e.entry.Store(entry)
entry.addEntry(e) entry.addEntry(e)
m.cond.Signal() m.cond.Signal()
return e, nil return e, nil
} }
func (m *DnsMonitor) Remove(entry *DnsMonitorEntry) { func (m *DnsMonitor) Remove(entry *DnsMonitorEntry) {
if !entry.removing.CompareAndSwap(false, true) { oldEntry := entry.entry.Swap(nil)
if oldEntry == nil {
// Already removed. // Already removed.
return return
} }
@ -247,16 +247,11 @@ func (m *DnsMonitor) Remove(entry *DnsMonitorEntry) {
} }
defer m.mu.Unlock() defer m.mu.Unlock()
if entry.entry == nil { e, found := m.hostnames[oldEntry.hostname]
return
}
e, found := m.hostnames[entry.entry.hostname]
if !found { if !found {
return return
} }
entry.entry = nil
if e.removeEntry(entry) { if e.removeEntry(entry) {
delete(m.hostnames, e.hostname) delete(m.hostnames, e.hostname)
} }
@ -273,7 +268,7 @@ func (m *DnsMonitor) clearRemoved() {
for hostname, entry := range m.hostnames { for hostname, entry := range m.hostnames {
deleted := false deleted := false
for e := range entry.entries { for e := range entry.entries {
if e.removing.Load() { if e.entry.Load() == nil {
delete(entry.entries, e) delete(entry.entries, e)
deleted = true deleted = true
} }