From 826e5155b29ec018f33cd56eee6ce19197b73879 Mon Sep 17 00:00:00 2001 From: Siyuan Date: Mon, 10 Nov 2025 16:55:26 +0000 Subject: [PATCH] fix(lldp): use mutexes to protect state --- internal/lldp/lldp.go | 4 ++-- internal/lldp/rx.go | 5 +++++ internal/lldp/tx.go | 2 ++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/internal/lldp/lldp.go b/internal/lldp/lldp.go index e1d61233..ebe54c3f 100644 --- a/internal/lldp/lldp.go +++ b/internal/lldp/lldp.go @@ -102,10 +102,10 @@ func (l *LLDP) Start() error { // StartRx starts the LLDP receiver if not already running func (l *LLDP) startRx() error { - l.mu.Lock() + l.mu.RLock() running := l.rxRunning enabled := l.enableRx - l.mu.Unlock() + l.mu.RUnlock() if running || !enabled { return nil diff --git a/internal/lldp/rx.go b/internal/lldp/rx.go index d6523ba7..7953fbf8 100644 --- a/internal/lldp/rx.go +++ b/internal/lldp/rx.go @@ -88,6 +88,11 @@ func (l *LLDP) setUpCapture() error { } func (l *LLDP) doCapture(logger *zerolog.Logger) { + if l.pktSourceRx == nil || l.rxCtx == nil { + logger.Error().Msg("packet source or RX context not initialized") + return + } + l.rxWaitGroup.Add(1) defer l.rxWaitGroup.Done() diff --git a/internal/lldp/tx.go b/internal/lldp/tx.go index 0fd66b1e..13116f6b 100644 --- a/internal/lldp/tx.go +++ b/internal/lldp/tx.go @@ -194,7 +194,9 @@ func (l *LLDP) startTx() error { cancel() } + l.mu.Lock() l.txCtx, l.txCancel = context.WithCancel(context.Background()) + l.mu.Unlock() if err := l.setUpTx(); err != nil { return fmt.Errorf("failed to set up TX: %w", err)