This is the mail archive of the
cygwin
mailing list for the Cygwin project.
Re: xz -9 : Cannot allocate memory
- From: Christopher Faylor <cgf-use-the-mailinglist-please at cygwin dot com>
- To: cygwin at cygwin dot com
- Date: Fri, 30 Aug 2013 17:03:49 -0400
- Subject: Re: xz -9 : Cannot allocate memory
- Authentication-results: sourceware.org; auth=none
- References: <50A41697 dot 3080406 at tiscali dot co dot uk> <loom dot 20130829T155739-66 at post dot gmane dot org> <loom dot 20130829T162752-851 at post dot gmane dot org> <20130829151121 dot GR21571 at calimero dot vinschen dot de> <87ioyowbq9 dot fsf at Rainer dot invalid> <loom dot 20130830T111847-683 at post dot gmane dot org> <20130830120244 dot GV21571 at calimero dot vinschen dot de> <loom dot 20130830T143654-505 at post dot gmane dot org> <20130830174631 dot GA8831 at calimero dot vinschen dot de> <20130830190048 dot GA21571 at calimero dot vinschen dot de>
- Reply-to: cygwin at cygwin dot com
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