From f773cd94886d7ce56b4adf778ebcaa693cd3bcff Mon Sep 17 00:00:00 2001 From: AnthonyEnr1quez <32233059+AnthonyEnr1quez@users.noreply.github.com> Date: Sun, 16 Feb 2025 11:20:28 -0600 Subject: [PATCH] lock mutex while getting wd and dir during ListFiles --- client.go | 47 +++++++++++++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/client.go b/client.go index 92eb9eb1..9d6af19e 100644 --- a/client.go +++ b/client.go @@ -418,31 +418,42 @@ func (c *client) UploadFile(path string, contents io.ReadCloser) error { func (c *client) ListFiles(dir string) ([]string, error) { pattern := filepath.Clean(strings.TrimPrefix(dir, string(os.PathSeparator))) - conn, err := c.connection() - if err = c.clearConnectionOnError(err); err != nil { - return nil, err - } - wd := "." - switch { - case dir == "/": - pattern = "*" - case pattern == ".": - if dir == "" { + if err := func() error { + c.mu.Lock() + defer c.mu.Unlock() + + conn, err := c.connection() + if err != nil { + return err + } + + switch { + case dir == "/": pattern = "*" - } else { - pattern = filepath.Join(dir, "*") + case pattern == ".": + if dir == "" { + pattern = "*" + } else { + pattern = filepath.Join(dir, "*") + } + case pattern != "": + pattern = "[/?]" + pattern + "/*" + wd, err = conn.Getwd() + if err != nil { + return err + } } - case pattern != "": - pattern = "[/?]" + pattern + "/*" - wd, err = conn.Getwd() + + return nil + }(); err != nil { if err = c.clearConnectionOnError(err); err != nil { return nil, err } } var filenames []string - err = c.Walk(wd, func(path string, d fs.DirEntry, err error) error { + if err := c.Walk(wd, func(path string, d fs.DirEntry, err error) error { if err != nil { return err } @@ -468,10 +479,10 @@ func (c *client) ListFiles(dir string) ([]string, error) { } } return err - }) - if err != nil { + }); err != nil { return nil, fmt.Errorf("listing %s failed: %w", dir, err) } + return filenames, nil }