From: Chris C. <ca...@al...> - 2009-02-12 10:04:31
|
On Thu, Feb 12, 2009 at 2:29 AM, D. Michael McIntyre <ros...@gm...> wrote: > On Wednesday 11 February 2009, hj...@us... wrote: > >> + // According to http://doc.trolltech.com/4.4/qdir.html#rename >> + // some systems fail, if renaming over an existing file. >> + // Therefore, delete first the existing file. >> + if (dir.exists(filename)) dir.remove(filename); > > Seeing this raises a small alarm, because I seem to remember we had a bug that > could destroy data while saving, and this temporary file business was meant > to solve that problem. > > I'm not saying your solution to the bug does or does not pose a problem. I > simply ask you to think about this and see if you're sure it's all OK. So long as the target file is only deleted after the temporary file is completely, correctly saved, then I think we're OK. The original situation was that we were opening the target file directly for writes, then saving the composition out to it. If saving failed, no valid file would remain. The fix was to save first to a file in the same place as the target but with a different name, then rename to the target; if we delete the target before the rename, it shouldn't matter so long as the rename itself is atomic (i.e. so that there is no chance of losing the file after saving it to the temporary location -- it will remain either in the temporary location or in the correct target location -- for this reason it is important that the temporary and target files are on the same filesystem). Does that make sense? (I'm trying to review the logic here rather than lay down the law, so if it doesn't sound right, say so.) Chris |