From eb288184036e2228777dd83ac70a6654b97aba81 Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Sun, 25 Feb 2024 06:45:53 -0800 Subject: [PATCH] wgengine: make pendOpen time later, after dup check Otherwise on OS retransmits, we'd make redundant timers in Go's timer heap that upon firing just do nothing (well, grab a mutex and check a map and see that there's nothing to do). Updates #cleanup Change-Id: Id30b8b2d629cf9c7f8133a3f7eca5dc79e81facb Signed-off-by: Brad Fitzpatrick --- wgengine/pendopen.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/wgengine/pendopen.go b/wgengine/pendopen.go index 0b34be8ab..7d3b87c22 100644 --- a/wgengine/pendopen.go +++ b/wgengine/pendopen.go @@ -108,16 +108,16 @@ func (e *userspaceEngine) trackOpenPostFilterOut(pp *packet.Parsed, t *tstun.Wra } } - timer := time.AfterFunc(tcpTimeoutBeforeDebug, func() { - e.onOpenTimeout(flow) - }) - e.mu.Lock() defer e.mu.Unlock() if _, dup := e.pendOpen[flow]; dup { // Duplicates are expected when the OS retransmits. Ignore. return } + + timer := time.AfterFunc(tcpTimeoutBeforeDebug, func() { + e.onOpenTimeout(flow) + }) mak.Set(&e.pendOpen, flow, &pendingOpenFlow{timer: timer}) return filter.Accept