dhcp4d: protect leases with a mutex
The HTTP handler runs in a separate goroutine.
This commit is contained in:
parent
73bd5c6a50
commit
e76886dab4
@ -27,6 +27,7 @@ import (
|
||||
"os"
|
||||
"os/signal"
|
||||
"sort"
|
||||
"sync"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
@ -68,7 +69,10 @@ func updateNonExpired(leases []*dhcp4d.Lease) {
|
||||
|
||||
var ouiDB = oui.NewDB("/perm/dhcp4d/oui")
|
||||
|
||||
var leases []*dhcp4d.Lease
|
||||
var (
|
||||
leasesMu sync.Mutex
|
||||
leases []*dhcp4d.Lease
|
||||
)
|
||||
|
||||
var (
|
||||
timefmt = func(t time.Time) string {
|
||||
@ -186,6 +190,8 @@ func loadLeases(h *dhcp4d.Handler, fn string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
leasesMu.Lock()
|
||||
defer leasesMu.Unlock()
|
||||
if err := json.Unmarshal(b, &leases); err != nil {
|
||||
return err
|
||||
}
|
||||
@ -215,6 +221,8 @@ func loadLeases(h *dhcp4d.Handler, fn string) error {
|
||||
Static bool
|
||||
}
|
||||
|
||||
leasesMu.Lock()
|
||||
defer leasesMu.Unlock()
|
||||
static := make([]tmplLease, 0, len(leases))
|
||||
dynamic := make([]tmplLease, 0, len(leases))
|
||||
tl := func(l *dhcp4d.Lease) tmplLease {
|
||||
@ -302,6 +310,8 @@ func logic() error {
|
||||
return err
|
||||
}
|
||||
handler.Leases = func(newLeases []*dhcp4d.Lease, latest *dhcp4d.Lease) {
|
||||
leasesMu.Lock()
|
||||
defer leasesMu.Unlock()
|
||||
leases = newLeases
|
||||
log.Printf("DHCPACK %+v", latest)
|
||||
b, err := json.Marshal(leases)
|
||||
|
Loading…
x
Reference in New Issue
Block a user