mirror of
https://github.com/rclone/rclone.git
synced 2025-04-24 05:04:17 +08:00
fs/accounting: Fix "file already closed" on transfer retries
This was caused by the recent reworking of the accounting interface. The Transfer object was recycling the Accounting object without resetting the stream. See: https://forum.rclone.org/t/error-file-already-closed/11469/ See: https://forum.rclone.org/t/rclone-b2-sync-post-error-method-not-supported/11718/
This commit is contained in:
parent
f73d0eb920
commit
f77027e6b7
@ -118,11 +118,15 @@ func (acc *Account) StopBuffering() {
|
||||
// async buffer (if any) and re-adding it
|
||||
func (acc *Account) UpdateReader(in io.ReadCloser) {
|
||||
acc.mu.Lock()
|
||||
acc.StopBuffering()
|
||||
if acc.withBuf {
|
||||
acc.StopBuffering()
|
||||
}
|
||||
acc.in = in
|
||||
acc.close = in
|
||||
acc.origIn = in
|
||||
acc.WithBuffer()
|
||||
if acc.withBuf {
|
||||
acc.WithBuffer()
|
||||
}
|
||||
acc.mu.Unlock()
|
||||
}
|
||||
|
||||
|
@ -117,6 +117,8 @@ func (tr *Transfer) Account(in io.ReadCloser) *Account {
|
||||
tr.mu.Lock()
|
||||
if tr.acc == nil {
|
||||
tr.acc = newAccountSizeName(tr.stats, in, tr.size, tr.remote)
|
||||
} else {
|
||||
tr.acc.UpdateReader(in)
|
||||
}
|
||||
tr.mu.Unlock()
|
||||
return tr.acc
|
||||
|
@ -341,6 +341,7 @@ func Copy(ctx context.Context, f fs.Fs, dst fs.Object, remote string, src fs.Obj
|
||||
} else {
|
||||
actionTaken = "Copied (Rcat, new)"
|
||||
}
|
||||
// NB Rcat closes in0
|
||||
dst, err = Rcat(ctx, f, remote, in0, src.ModTime(ctx))
|
||||
newDst = dst
|
||||
} else {
|
||||
|
Loading…
x
Reference in New Issue
Block a user