What percentage of s3sync users would be able to track this down by themselves in the current state?
I try to catch errors on my side and print out reasonable messages. But I'm not going to make a deadman switch timer that checks for stalls inside ruby, that's just over the top imo. As for file size changes and active file handling, locking is really the only way to fix it, and that assumes that the same manner of lock used is honored by all the things accessing the files. It's a problem that's bigger than a breadbox, and there's just no way I'm going to tackle it.
Your implication is that there's some simple way to catch this and error out, but I think it's a bit of a naive assessment. Each time between the check and the access, the answer could change. You're never going to fix it without some kind of synchronization.
One "right" answer, in some sense, would be to anticipate files that are likely to be open, and exclude them.