Date: Thu, 6 Aug 1998 13:56:40 -0400 From: Garance A Drosihn <drosih@rpi.edu> To: dg@root.com, Mark Huizer <freebsd@xaa.iae.nl> Cc: freebsd-current@FreeBSD.ORG Subject: Re: memory leaks in libc Message-ID: <v0401171cb1ef86eecc10@[128.113.24.47]> In-Reply-To: <199808060948.CAA26488@implode.root.com> References: Your message of "Thu, 06 Aug 1998 10:08:59 %2B0200." <19980806100859.A312@xaa.iae.nl>
next in thread | previous in thread | raw e-mail | index | archive | help
>> To mention a very simple example:
>>
>> main(){while(1){setenv("A","AA",1);setenv("A","A",1);}}
>>
>> will consume all memory within short periods of time (see setenv.c
>> for the reason).
>>
>> Is this wellknown? I think it is bad, and would like to fix it
>
> The problem with fixing setenv() is that you don't know if a pointer
> was malloced, allocated from the env area above the stack, points to
> read-only text, points to a static data buffer, etc. There really is
> no way to know for sure, so you can't free the memory.
setenv could keep track of memory that *it* mallocs for environment
variables. That would at least solve the example case, even if it
doesn't solve everything. This implies it'd have some memory-
management smarts of it's own, and I don't know if a partial fix is
really worth that much effort, but I would think it is doable.
(seeing that it's mostly dealing with short strings, I'd have it malloc
1 Kbytes at a time, and then carve that up for environment variables.
Then it wouldn't be too expensive to check if a given variable is part
of setenv's own memory).
---
Garance Alistair Drosehn = gad@eclipse.its.rpi.edu
Senior Systems Programmer or drosih@rpi.edu
Rensselaer Polytechnic Institute
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?v0401171cb1ef86eecc10>
