From f8d1b4c8f2f835e755865e4057732594dffa4d23 Mon Sep 17 00:00:00 2001 From: Robert Obryk Date: Mon, 23 Nov 2020 09:35:00 +0100 Subject: [PATCH] internal/dhcp4: make persistent errors actally persistent (#62) Previously, a permanent error would not be persisted for future invocations of ObtainOrRenew. In practice, the daemon immediately exited, so this made no difference. --- internal/dhcp4/dhcp4.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/dhcp4/dhcp4.go b/internal/dhcp4/dhcp4.go index 5c99b80..2a087a6 100644 --- a/internal/dhcp4/dhcp4.go +++ b/internal/dhcp4/dhcp4.go @@ -44,6 +44,7 @@ type Client struct { err error once sync.Once + onceErr error connection net.PacketConn hardwareAddr net.HardwareAddr hostname string @@ -84,7 +85,6 @@ var errNAK = errors.New("received DHCPNAK") // ObtainOrRenew returns false when encountering a permanent error. func (c *Client) ObtainOrRenew() bool { - var onceErr error c.once.Do(func() { if c.timeNow == nil { c.timeNow = time.Now @@ -94,13 +94,13 @@ func (c *Client) ObtainOrRenew() bool { LinuxSockDGRAM: true, }) if err != nil { - onceErr = err + c.onceErr = err return } c.connection = conn } if c.connection == nil && c.Interface == nil { - onceErr = fmt.Errorf("c.Interface is nil") + c.onceErr = fmt.Errorf("c.Interface is nil") return } if c.hardwareAddr == nil && c.HWAddr != nil { @@ -115,14 +115,14 @@ func (c *Client) ObtainOrRenew() bool { if c.hostname == "" { var utsname unix.Utsname if err := unix.Uname(&utsname); err != nil { - onceErr = err + c.onceErr = err return } c.hostname = string(utsname.Nodename[:bytes.IndexByte(utsname.Nodename[:], 0)]) } }) - if onceErr != nil { - c.err = onceErr + if c.onceErr != nil { + c.err = c.onceErr return false // permanent error } c.err = nil // clear previous error