On Fri, Aug 30, 2013 at 09:00:48PM +0200, Corinna Vinschen wrote: >On Aug 30 19:46, Corinna Vinschen wrote: >> On Aug 30 12:58, Achim Gratz wrote: >> > Corinna Vinschen <corinna-cygwin <at> cygwin.com> writes: >> > > Yes, looks normal and expected from what you observed. mmap commits >> > > memory top-down and that was apparently the first free slot big enough >> > > to fullfil the request. The default heap size is 384 Megs and then >> > > there's apparently not enough space anywhere. >> > >> > Sorry if I'm dense, but does this mean that setting the default heap size >> > to >> > zero does in fact mean it's trying to use 374MiB... wait, yes it is: the >> > memory map is the same when I'm setting the initial heap size to 384MiB >> > with >> > peflags. >> > >> > So, even though that rather large heap is essentially unused at the point >> > of >> > failure and there is enough memory free just beyond the heap, the >> > allocation >> > still fails because both the existing heap and the free space are both >> > smaller than what's requested? >> >> Well, good question. You could debug the sbrk function and see why >> it fails to reserve the space. > >I just debugged this and it seems our sbrk implementation has a serious >problem to extend the heap if the new chunk of memory requires to commit >some of the existing heap and to reserve and commit some more space. >It tries to reserve memory using the wrong address and the wrong size. >It also uses a too simple method to commit the memory. I'll apply a fix >shortly.
It looked fine to me. The only code change that I did make was to change your coercion of pointers to ptrdiff_t types into (char *), since that is more in keeping with the rest of the code. I had a hard time reading the code with all of the cygheap-> pointers so I changed two functions to be a user_info_heap methods. That, IMO, makes the code faster and more readable. You probably saw that I fixed the USR1/USR2 issue. That was a serious signal bug. I think both of those warrant a new release in fact. cgf -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple