This is the mail archive of the
cygwin@sources.redhat.com
mailing list for the Cygwin project.
Re: memory leak in setenv()?
- To: Andrej Borsenkow <Andrej dot Borsenkow at mow dot siemens dot ru>
- Subject: Re: memory leak in setenv()?
- From: Corinna Vinschen <vinschen at cygnus dot com>
- Date: Tue, 25 Jul 2000 12:27:37 +0200
- CC: Cygwin at Sourceware dot Cygnus dot Com
- References: <001201bff612$88df19f0$21c9ca95@mow.siemens.ru>
- Reply-To: cygwin <cygwin at sources dot redhat dot com>
Andrej Borsenkow wrote:
>
> If existing value is longer than new, old value is simply overwritten.
> But if old value is shorter, new memory chunk is allocated via malloc(),
> but old one is never freed. Initially all environment strings are
> allocated using strdup() in environ_init(), so who is responsible for
> freeing unused memory in this case?
Nobody in case of setenv() and unsetenv(). It's a known problem
of the environment implementation that freeing environment
variables is not easy. The library can't decide if a string is
currently in use by the application.
As another example take a look into the implementation of
setenv/unsetenv in glibc. It does never free environment strings
by itself so each call to setenv(NAME, VAL, 1) creates a new
memory leak unless it is a known string value once given to
setenv. In that case, glibc tries to recycle strings to use
memory more efficient.
Corinna
--
Corinna Vinschen
Cygwin Developer
Cygnus Solutions, a Red Hat company
--
Want to unsubscribe from this list?
Send a message to cygwin-unsubscribe@sourceware.cygnus.com