From eda21b44061f22b35fa30fac0b5f03276400fa24 Mon Sep 17 00:00:00 2001 From: Marcin Tojek Date: Mon, 5 Dec 2022 18:27:05 +0100 Subject: [PATCH 1/5] fix: agent panics on closed network --- agent/agent.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/agent/agent.go b/agent/agent.go index 822297ad70c3d..242c5ee628d3f 100644 --- a/agent/agent.go +++ b/agent/agent.go @@ -262,7 +262,9 @@ func (a *agent) createTailnet(ctx context.Context, derpMap *tailcfg.DERPMap) (ne return nil, xerrors.Errorf("create tailnet: %w", err) } defer func() { - if err != nil { + // Apparently, it's possible to shut down network via agent.Close(). + // The condition `network != nil` prevents panic in tests. + if err != nil && network != nil { network.Close() } }() From 3c60eaeafe8c4df7bb3363ad0bcb3e8772024fce Mon Sep 17 00:00:00 2001 From: Marcin Tojek Date: Mon, 5 Dec 2022 19:39:24 +0100 Subject: [PATCH 2/5] Remove a.network = network --- agent/agent.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/agent/agent.go b/agent/agent.go index 242c5ee628d3f..fb3aae917501e 100644 --- a/agent/agent.go +++ b/agent/agent.go @@ -264,11 +264,11 @@ func (a *agent) createTailnet(ctx context.Context, derpMap *tailcfg.DERPMap) (ne defer func() { // Apparently, it's possible to shut down network via agent.Close(). // The condition `network != nil` prevents panic in tests. - if err != nil && network != nil { + if err != nil { network.Close() } }() - a.network = network + // a.network = network a.closeMutex.Unlock() sshListener, err := network.Listen("tcp", ":"+strconv.Itoa(codersdk.TailnetSSHPort)) From 9169bcc9e92be9cad3c3236756f9b5c1ae52667a Mon Sep 17 00:00:00 2001 From: Marcin Tojek Date: Mon, 5 Dec 2022 19:39:51 +0100 Subject: [PATCH 3/5] Fix --- agent/agent.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/agent/agent.go b/agent/agent.go index fb3aae917501e..fc02962ca4b5b 100644 --- a/agent/agent.go +++ b/agent/agent.go @@ -262,13 +262,10 @@ func (a *agent) createTailnet(ctx context.Context, derpMap *tailcfg.DERPMap) (ne return nil, xerrors.Errorf("create tailnet: %w", err) } defer func() { - // Apparently, it's possible to shut down network via agent.Close(). - // The condition `network != nil` prevents panic in tests. if err != nil { network.Close() } }() - // a.network = network a.closeMutex.Unlock() sshListener, err := network.Listen("tcp", ":"+strconv.Itoa(codersdk.TailnetSSHPort)) From 5fdcba4ba19a5511150cce55ee25e549621f8713 Mon Sep 17 00:00:00 2001 From: Marcin Tojek Date: Mon, 5 Dec 2022 19:45:01 +0100 Subject: [PATCH 4/5] Fix --- agent/agent.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/agent/agent.go b/agent/agent.go index fc02962ca4b5b..eb3d6104970b1 100644 --- a/agent/agent.go +++ b/agent/agent.go @@ -245,12 +245,13 @@ func (a *agent) trackConnGoroutine(fn func()) error { return nil } -func (a *agent) createTailnet(ctx context.Context, derpMap *tailcfg.DERPMap) (network *tailnet.Conn, err error) { +func (a *agent) createTailnet(ctx context.Context, derpMap *tailcfg.DERPMap) (_ *tailnet.Conn, err error) { a.closeMutex.Lock() if a.isClosed() { a.closeMutex.Unlock() return nil, xerrors.New("closed") } + var network *tailnet.Conn network, err = tailnet.NewConn(&tailnet.Options{ Addresses: []netip.Prefix{netip.PrefixFrom(codersdk.TailnetIP, 128)}, DERPMap: derpMap, From 004ebbd540c735ef90f48e6640e0a1a186f506b7 Mon Sep 17 00:00:00 2001 From: Marcin Tojek Date: Mon, 5 Dec 2022 19:49:26 +0100 Subject: [PATCH 5/5] Fix --- agent/agent.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/agent/agent.go b/agent/agent.go index eb3d6104970b1..b03cdb11c6810 100644 --- a/agent/agent.go +++ b/agent/agent.go @@ -251,8 +251,7 @@ func (a *agent) createTailnet(ctx context.Context, derpMap *tailcfg.DERPMap) (_ a.closeMutex.Unlock() return nil, xerrors.New("closed") } - var network *tailnet.Conn - network, err = tailnet.NewConn(&tailnet.Options{ + network, err := tailnet.NewConn(&tailnet.Options{ Addresses: []netip.Prefix{netip.PrefixFrom(codersdk.TailnetIP, 128)}, DERPMap: derpMap, Logger: a.logger.Named("tailnet"),