From b298ca171b9e7d0ec426694e1979745676dbd19f Mon Sep 17 00:00:00 2001 From: Cameron Date: Mon, 23 Feb 2026 15:37:26 +1300 Subject: [PATCH] Fix some race conditions --- cmd/managementd/main.go | 6 ++++-- management-interface.go | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/cmd/managementd/main.go b/cmd/managementd/main.go index 9c6a69a..8657701 100644 --- a/cmd/managementd/main.go +++ b/cmd/managementd/main.go @@ -366,7 +366,7 @@ func handleConn(conn net.Conn) error { log.Println("Error reading frame ", err) return err } - if len(sockets) == 0 { + if !hasActiveClients() { continue } if err := lepton3.ParseRawFrame(rawFrame, frame, 0); err != nil { @@ -469,9 +469,11 @@ func WebsocketServer(ws *websocket.Conn) { } } if message.Type == "Heartbeat" { + socketsLock.Lock() if socket, ok := sockets[message.Uuid]; ok { socket.LastHeartbeatAt = time.Now() } + socketsLock.Unlock() } } time.Sleep(1 * time.Millisecond) @@ -496,7 +498,7 @@ func sendFrameToSockets() { // NOTE: Only bother with this work if we have clients connected. lastFrame = <-frameCh - if len(sockets) != 0 { + if hasActiveClients() { if lastFrame.Disconnected { socketsLock.RLock() for uuid, socket := range sockets { diff --git a/management-interface.go b/management-interface.go index 5103699..fcf8429 100644 --- a/management-interface.go +++ b/management-interface.go @@ -89,7 +89,7 @@ func getDeviceName() string { return strings.SplitN(name, ".", 2)[0] } -// Return the serial number for the Raspberr Pi in the device. +// Return the serial number for the Raspberry Pi in the device. func getRaspberryPiSerialNumber() string { if runtime.GOOS == "windows" { return ""