mirror of
https://github.com/rclone/rclone.git
synced 2024-11-22 15:30:06 +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
e09a4ff019
commit
bfbddab46b
|
@ -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
|
||||
|
|
|
@ -346,6 +346,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…
Reference in New Issue
Block a user