On Jul 17 17:54, Brian Ford wrote: > Untested this time because I have to run to an appointment. > > 2006-07-17 Brian Ford <[EMAIL PROTECTED]> > > * winsup.h (mmap_region_status): New enum. > (mmap_is_attached_or_noreserve_page): Adjust prototype and rename > as below. > * mmap.cc (mmap_is_attached_or_noreserve_page): Rename > mmap_is_attached_or_noreserve. Add region length parameter. > Return enum above. > * exceptions.cc (_cygtls::handle_exceptions): Accomodate above. > * fhandler.cc (fhandler_base::raw_read): Call above for NOACCESS > errors and retry on success to allow reads into untouched > MAP_NORESERVE buffers.
I applied your patch to the cv-branch with some changes. The way you are calling search_record (see there) > + long record_idx = map_list->search_record ((caddr_t)addr, 1, > + u_addr, u_len, -1); always returns a u_len of 1. The result is that for each page in memory, the loop runs 4096 times in the worst case. I added the necessary alignment stuff and minimized the number of calls to VirtualAlloc. Don't be surprised that I now used getpagesize() instead of getsystempagesize (). I mulled over this a while. The idea is that the application expects a page size of 64K, not 4K. So the functionality makes most sense if it assumes 64K pages, too. This also minimizes the number of necessary calls to mmap_is_attached_or_noreserve_page, which is a good thing, IMO. Thanks for the patch. It's available for further digestion and patches in the cv-branch. Corinna -- Corinna Vinschen Please, send mails regarding Cygwin to Cygwin Project Co-Leader cygwin AT cygwin DOT com Red Hat