On 01/11/2012 08:27 PM, Peter Rosin wrote: > Stefano Lattarini skrev 2012-01-11 18:31: >> Hi Peter, sorry for the delay. > > No rush! > >>>>>> We could enhance your original workaround like this: >>>>>> >>>>>> am__remove_distdir = \ >>>>>> { test ! -d "$(distdir)" \ >>>>>> || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ >>>>>> - && rm -fr "$(distdir)"; }; } >>>>>> + && if rm -fr "$(distdir)"; then :; else \ >>>>>> +## On MSYS (1.0.17) it is not possible to remove a directory that is >>>>>> +## in use; so, if the first rm fails, we sleep some seconds and retry, >>>>>> +## to give pending processes some time to exit and "release" the >>>>>> +## directory before we removed. See automake bug#10470. >>>>>> + sleep 5 && rm -fr "$(distdir)"; fi; }; } >>>>>> am__post_remove_distdir = $(am__remove_distdir) >>>>>> endif %?TOPDIR_P% >>>> >>>>> This works, best so far! Committable, if you ask me. >>>>> >>> >> Could you try the attached test case to see if it can reliably expose the >> problem on MSYS/MinGW? If yes, I'll prepare a patch shortly. > > If I (try to) mend the race (the "rm -rf foo.d" reliably beats the "cd foo.d" > in the subshell) by adding a "sleep 1" before the "rm -rf foo.d" > Thanks for the info, I've amend the test accordingly. > So, I guess no, the probelm is not exposed by the test. > > Did you mean "$my_sleep &" in the foo.test script? > Yes, I did; sorry for the sloppiness. > If add that &, the test fails in much the same way as we've seen previously > in this bug report. > Good! Attached is the proposed patch series: the first patch should expose the bug, the second patch should fix it. I will apply them once I have confirmation the bug is correctly exposed and fixed. Thanks, Stefano.