diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 247ef594f..1b4ab11d6 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,5 +1,11 @@ +Mon Mar 26 18:48:00 2001 Corinna Vinschen + + * mmap.cc (mmap): Outflank copy-on-write problem on 9x by + setting access mode to FILE_MAP_READ when read access is requested. + Sun Mar 25 20:12:21 2001 Christopher Faylor + * dlfcn.cc (check_access): Eliminate. (check_path_access): Use passed in path_conv buf. (get_full_path_of_dll): Use passed in name buf to avoid a static. Rip diff --git a/winsup/cygwin/mmap.cc b/winsup/cygwin/mmap.cc index e1fc2d621..9c9c75c50 100644 --- a/winsup/cygwin/mmap.cc +++ b/winsup/cygwin/mmap.cc @@ -380,7 +380,10 @@ mmap (caddr_t addr, size_t len, int prot, int flags, int fd, off_t off) } DWORD access = (prot & PROT_WRITE) ? FILE_MAP_WRITE : FILE_MAP_READ; - if (flags & MAP_PRIVATE) + /* copy-on-write doesn't work correctly on 9x. To have at least read + access we use *READ mapping on 9x when appropriate. It will still + fail when needing write access, though. */ + if ((flags & MAP_PRIVATE) && (os_being_run == winNT || !(prot & PROT_READ))) access = FILE_MAP_COPY; SetResourceLock(LOCK_MMAP_LIST,READ_LOCK|WRITE_LOCK," mmap");