Matthieu Moy <Matthieu.Moy@xxxxxxxxxxxxxxx> writes: > This looks like a race between deleting objects/05/ and creating > objects/05/cdb51bb0ea3e229734a4b1bddd5ec70fbc65ed. > > I don't understand how this is possible, since the temporary file and > the final one are in the same directory, so deleting the directory > should fail. > > What am I missing? 1. tmp_obj_* gets created in objects/05/ by "git unpack-objects"; 2. prune_cruft() comes, notices tmp_obj_* that is sufficiently old, decides to remove in "git prune". 3. prune_subdir() comes, notices objects/05/ is now empty, does rmdir(). 4. "git unpack-objects" closes the file whose inode was originally associated with the path objects/05/tmp_obj_*; 5. "git unpack-objects" calls finalize_object_file() and tries to link(2) or rename(2) it to its final name. It does not find the source of the link or rename and says "oops, no such file". -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html