This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] misc: Use allocate_once in getmntent
* Adhemerval Zanella:
> On 21/08/2019 11:40, Florian Weimer wrote:
>> Both the buffer and struct mntent are now allocated on the heap.
>> This results in a slight reduction of RSS usage.
>>
>> 2019-08-21 Florian Weimer <fweimer@redhat.com>
>>
>> * misc/mntent.c (struct mntent_buffer): Define.
>> (mntent_buffer): Adjust type to void *.
>> (allocate): Adjust for allocate_once.
>> (deallocate): New function.
>> (getmntent): Call allocate_once.
>>
>> diff --git a/misc/mntent.c b/misc/mntent.c
>> index 980ea40967..8fae6064c6 100644
>> --- a/misc/mntent.c
>> +++ b/misc/mntent.c
>> @@ -18,36 +18,41 @@
>>
>> #include <mntent.h>
>> #include <stdlib.h>
>> -#include <libc-lock.h>
>> +#include <allocate_once.h>
>> +
>> +struct mntent_buffer
>> +{
>> + struct mntent m;
>> + char buffer[4096];
>> +};
>
> The struct mntent is just 24 bytes for 32 bits or 40 bytes for 64 bits,
> I would focus on optimizing the required buffer instead.
There are four byte for the __libc_once guard.
The main point for doing this is that this storage is always wasted,
even if the interface is never called. The change seems simple enough
to do now, even if we replace it with something better afterwards (like
storing the buffer in the FILE *, or otherwise associating it with it,
or making it thread-local).
Thanks,
Florian