Florian Weimer wrote:
And GIT's workaround is to read the whole file into memory and close it after that? Uh-oh.
On 7/16/06, Alex Riesen <fork0@xxxxxxxxxxx> wrote:
Yakov Lerner, Sun, Jul 16, 2006 17:03:49 +0200: > Cygwin has mmap. But cygwin's mmap() not good enough for git. > What happens is that git does rename() when target file has active mmap(). > In cygwin, this makes rename() to fail. This is what makes cygwin's > mmap unusable for git. (BTW for read-only git access, mmap() will work > on cygwin, for what I saw. But attempts to modify index will break). It is not Cygwin really. It's windows. You can't rename or delete an open or mmapped file in that thing.
We have right to expect cygwin to do some effort to emulate the unix mmap() semantics on top of different semantics of windows memory-mapped files. Why doesn't cygwin do some effort to detect active mmap()s on the file before rename and do something like (1) unmap (2) rename the target to temp name (3) remap. (4) take care of temp file cleanup ? Probably too messy even if possible. Is it reasonable to expect git to do this mess ? It probably belongs to the generic cygwin layer anyway. I did try another kind of workaround, in which I unmapped the target file before rename. But it didn't work in all situations and was too intrusive to the git-apply logic. Didn't work. Regarding the existing workaround (NO_MMAP), well, cygwin is not exactly a speed champion in many areas. I didn't really notice speed loss with NO_MMAP, maybe because cygwin loses time here and there anyway ? Yakov - : 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