RcloneProvider: Block rename, copy, and move while source file is open #90
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Android's
StorageManager.openProxyFileDescriptor()
makes it impossible to have a blockingclose()
call from the client's point of view. This causes problems with client apps that write data to a temporary file and then rename it when complete. Rclone's VFS cache writeback process fails if a file gets renamed while it is being uploaded.Since the asynchronicity of
close()
is something we're stuck with, the best we can do is make other operations blocking.RcloneProvider
now tracks which files are open for writing and forces the rename, copy, and move operations to wait if the source file is one of the open files or any of its parent directories. This is sufficient to make common file access patterns work, but if a client app tries to shoot itself in the foot, it can absolutely still do so.Fixes: #81