From ef789acee4ef990d9f93fa7f718f819b5bdea03d Mon Sep 17 00:00:00 2001 From: Simon Zolin Date: Tue, 19 Mar 2019 15:54:35 +0300 Subject: [PATCH] * control: DHCP: don't return expired leases - fix potential race when lease's data can be modified while UI thread is reading it --- dhcpd/dhcpd.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/dhcpd/dhcpd.go b/dhcpd/dhcpd.go index b54195a8..f1ce0f2a 100644 --- a/dhcpd/dhcpd.go +++ b/dhcpd/dhcpd.go @@ -517,10 +517,17 @@ func (s *Server) handleDecline(p dhcp4.Packet, options dhcp4.Options) dhcp4.Pack } // Leases returns the list of current DHCP leases (thread-safe) -func (s *Server) Leases() []*Lease { +func (s *Server) Leases() []Lease { + var result []Lease + now := time.Now().Unix() s.RLock() - result := s.leases + for _, lease := range s.leases { + if lease.Expiry.Unix() > now { + result = append(result, *lease) + } + } s.RUnlock() + return result }