This is the mail archive of the cygwin-developers mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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
behavior.*

cgf

*Welcome to Cygwin!


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]