Fix various minor bugs in the copy folders function

This commit is contained in:
Kovid Goyal
2026-04-24 15:35:44 +05:30
parent 0a384ffad4
commit 4a5ab0a05e

View File

@@ -434,8 +434,7 @@ func CopyFolderContents(ctx context.Context, src_folder *os.File, dest_folder *o
if v == nil { if v == nil {
break break
} }
item := v.Value.(*item) item := queue.Remove(v).(*item)
if item.src_parent != nil { if item.src_parent != nil {
item.src_parent.Unref() 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) 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 { fail := func(err error) bool {
completed_channel <- err completed_channel <- err
return false return false
@@ -484,7 +487,7 @@ func CopyFolderContents(ctx context.Context, src_folder *os.File, dest_folder *o
if err != nil { if err != nil {
return fail(err) return fail(err)
} }
df, err := OpenAt(dest.File(), child.Name()) df, err := CreateDirAt(dest.File(), child.Name(), child.Mode().Perm())
if err != nil { if err != nil {
sf.Close() sf.Close()
return fail(err) return fail(err)