From 4a5ab0a05efc4c0ada28259ea4424f0be3b61259 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 24 Apr 2026 15:35:44 +0530 Subject: [PATCH] Fix various minor bugs in the copy folders function --- tools/utils/file_at_fd.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tools/utils/file_at_fd.go b/tools/utils/file_at_fd.go index ac55496ef..6eec82491 100644 --- a/tools/utils/file_at_fd.go +++ b/tools/utils/file_at_fd.go @@ -434,8 +434,7 @@ func CopyFolderContents(ctx context.Context, src_folder *os.File, dest_folder *o if v == nil { break } - item := v.Value.(*item) - + item := queue.Remove(v).(*item) if item.src_parent != nil { item.src_parent.Unref() } @@ -446,6 +445,10 @@ func CopyFolderContents(ctx context.Context, src_folder *os.File, dest_folder *o }() src, dest := NewRefCountedFile(src_folder), NewRefCountedFile(dest_folder) + // Add an extra reference so that the files passed into this function are + // not closed in do_one() + src.NewRef() + dest.NewRef() fail := func(err error) bool { completed_channel <- err return false @@ -484,7 +487,7 @@ func CopyFolderContents(ctx context.Context, src_folder *os.File, dest_folder *o if err != nil { return fail(err) } - df, err := OpenAt(dest.File(), child.Name()) + df, err := CreateDirAt(dest.File(), child.Name(), child.Mode().Perm()) if err != nil { sf.Close() return fail(err)