From ddebd3091787711f71883edcca01a00a18f8f642 Mon Sep 17 00:00:00 2001 From: Joe Tsai Date: Thu, 4 Aug 2022 13:22:56 -0700 Subject: [PATCH] tsnet: fix closing of filch buffer (#5299) It should be safe to initialize multiple Server instances without any resource leaks what-so-ever. Signed-off-by: Joe Tsai --- tsnet/tsnet.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tsnet/tsnet.go b/tsnet/tsnet.go index bd77e104e..d9439927c 100644 --- a/tsnet/tsnet.go +++ b/tsnet/tsnet.go @@ -91,6 +91,7 @@ type Server struct { shutdownCtx context.Context shutdownCancel context.CancelFunc localClient *tailscale.LocalClient + logbuffer *filch.Filch logtail *logtail.Logger mu sync.Mutex @@ -138,6 +139,7 @@ func (s *Server) Close() error { defer wg.Done() // Perform a best-effort final flush. s.logtail.Shutdown(ctx) + s.logbuffer.Close() }() if _, isMemStore := s.Store.(*mem.Store); isMemStore && s.Ephemeral { @@ -238,7 +240,7 @@ func (s *Server) start() error { } logid := lpc.PublicID.String() - f, err := filch.New(filepath.Join(s.rootPath, "tailscaled"), filch.Options{ReplaceStderr: false}) + s.logbuffer, err = filch.New(filepath.Join(s.rootPath, "tailscaled"), filch.Options{ReplaceStderr: false}) if err != nil { return fmt.Errorf("error creating filch: %w", err) } @@ -246,7 +248,7 @@ func (s *Server) start() error { Collection: lpc.Collection, PrivateID: lpc.PrivateID, Stderr: ioutil.Discard, // log everything to Buffer - Buffer: f, + Buffer: s.logbuffer, NewZstdEncoder: func() logtail.Encoder { w, err := smallzstd.NewEncoder(nil) if err != nil {