From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 791 invoked by alias); 7 Aug 2019 14:28:30 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Received: (qmail 742 invoked by uid 89); 7 Aug 2019 14:28:29 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-18.4 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,SPF_HELO_PASS autolearn=ham version=3.3.1 spammy=H*Ad:U*mail, handed X-HELO: mx1.redhat.com From: Florian Weimer To: Carlos O'Donell Cc: libc-alpha@sourceware.org, Niklas =?utf-8?Q?Hamb=C3=BCchen?= Subject: Re: [PATCH] malloc: Fix missing accounting of top chunk in malloc_info [BZ #24026] References: <87blx9hyo7.fsf@oldenburg2.str.redhat.com> <87ftmkhmg2.fsf@oldenburg2.str.redhat.com> <757d8c19-6f15-928c-1adf-d818d0347e7f@redhat.com> Date: Wed, 07 Aug 2019 14:28:00 -0000 In-Reply-To: <757d8c19-6f15-928c-1adf-d818d0347e7f@redhat.com> (Carlos O'Donell's message of "Fri, 2 Aug 2019 13:49:31 -0400") Message-ID: <87h86tf3tf.fsf@oldenburg2.str.redhat.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.2 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-SW-Source: 2019-08/txt/msg00125.txt.bz2 * Carlos O'Donell: > I agree with you that this looks correct, but I would > really have expected the top chunk to be in one of > the counted bins if it was actually free. However, it > turns out I'm wrong. The code and logic treat top > as a chunk which is no bin. And even when we expand > the heap we have to manually free the old top, and only > at that point does it enter into a bin, because the new > top on the new heap is now the special top. > > Please repost with a comment to that effect added: > > /* The top-most available chunk is treated specially > and is never in any bin. See "initial_top" comments. */ Please see below. Thanks, Florian From: Niklas Hamb=C3=BCchen Subject: malloc: Fix missing accounting of top chunk in malloc_info [BZ #24= 026] Fixes ` incorrectly showing as 0 most of the time. The rest value being wrong is significant because to compute the actual amount of memory handed out via malloc, the user must subtract it from . That result being wrong makes investigating memory fragmentation issues like close to impossible. 2019-08-07 Niklas Hamb=C3=BCchen Carlos O'Donell [BZ #24026] * malloc/malloc.c (__malloc_info): Account for top chunk. diff --git a/malloc/malloc.c b/malloc/malloc.c index 343d89f489..0e65d636cd 100644 --- a/malloc/malloc.c +++ b/malloc/malloc.c @@ -5406,6 +5406,12 @@ __malloc_info (int options, FILE *fp) =20 __libc_lock_lock (ar_ptr->mutex); =20 + /* Account for top chunk. The top-most available chunk is + treated specially and is never in any bin. See "initial_top" + comments. */ + avail =3D chunksize (ar_ptr->top); + nblocks =3D 1; /* Top always exists. */ + for (size_t i =3D 0; i < NFASTBINS; ++i) { mchunkptr p =3D fastbin (ar_ptr, i);