This is the mail archive of the
mailing list for the Cygwin project.
Re: Broken autoconf mmap test
On Thu, Mar 24, 2011 at 06:40:36PM +0100, Corinna Vinschen wrote:
>On Mar 24 12:44, Christopher Faylor wrote:
>> On Thu, Mar 24, 2011 at 10:23:57AM -0600, Eric Blake wrote:
>> >On 03/24/2011 10:21 AM, Christopher Faylor wrote:
>> >>> - In all three possible solutions above: What if the original file
>> >>> handle used in the mmap call has been closed and the file permissions
>> >>> have been changed in the meantime so that the process does not have
>> >>> write permissions anymore?
>> >> - Isn't it going to be really slow? I guess if it only happens once
>> >> per page it won't be that bad but still: ouch.
>There is a good chance that it's going to be slower. I'm not sure if
>loading the file into the anonymous mapping is a problem since that
>would have to be done under the hood as well, if the mapping is a file
>mapping. For the first write to each page you have a hit of a couple of
>cycles to change the page protection. When writing back the changes you
>have to open the file, scan the pages and write back the changed ones.
>Opening the handle could be quite a hit, writing the changes back would
>be basically the same as the OS has to do as well. However, while the
>OS can do so in the background whenever it sees fit, Cygwin couldn't.
>> >And if I'm understanding correctly, it only needs to happen for the one
>> >page at the end of the file; all earlier 64k chunks of the file can be
>> >mapped normally, if you can guarantee that the normal mappings are
>> >adjacent with the one special mapping.
>> Ah. So that would make it like a stack guard page then.
>Uh, no. This is an anonymous mapping, ok? So there's no connection
>to the file which has been mapped. So the mechanism would have to
>cover the entire mapping. It would kind of having all pages set to
>be guard pages, but you can't really use guard pages since they have
>a hit for writing *and* reading.
Ok. So I had it right to begin with. This is like a guard page insofar
as you see an exception the first time you hit a page but it's not really
a "guard page" in any other sense.
I really hate that we have to go to such lengths to implement sensical
*Welcome to Cygwin!