agora inbox for postgres@postgres.berkeley.edu
help / color / mirror / Atom feedFrom: Tom R.Hageman <tom@basil.icce.rug.nl>
To: rp2y@methi.ndim.edrc.cmu.edu
Cc: postgres@postgres.Berkeley.EDU
Cc: Shreeniwas N Sapre <sns@asterix.cs.unipune.ernet.in>
Subject: Re: putenv in postmaster.c
Date: Wed, 12 Jul 95 18:50:05 +0200
Message-ID: <9507121650.AA01107@basil.icce.rug.nl> (raw)
References: <199507101710.KAA06819@nobozo.CS.Berkeley.EDU>
Robert Patrick <rp2y@methi.ndim.edrc.cmu.edu> wrote:
> [Shreeniwas N Sapre <sns@asterix.cs.unipune.ernet.in> wrote:]
> > The use of putenv in postmaster.c (sample below) has crashed
> > postmaster on our system (DGUX 5.4R2.10). The symptom is its inability
> > to find "template1" after servicing the first 2 or 3 requests. My
> > diagnosis is the use of envEntry ( which is on stack) for putenv
> > causing corrupted environment entries, as putenv keeps a pointer to
> > the string and not a copy of the string. This problem surfaced after
> > we made a few changes (unrelated to this problem) to postmaster. We
> > have made envEntry as "static" as a solution.
> >
[code sample munched]
>
> First, I'm confused by the code that you posted, this obviously isn't
> right since the memory allocated for envEntry is allocated on the
> stack when this function is called and released when the function
> returns. I am assuming that this is the "bad" example.
>
> Second, I'm not sure where you got this code because both Postgres V4.2
> and Postgres95 actually declare envEntry as an array of pointers and
> call calloc() to allocate the memory (which is probably a cleaner
> solution that using a "static" array of character arrays).
>
> BackendStartup looks like this in Postgres V4.2:
>
> BackendStartup(packet, port)
> ...
> {
> ...
> char *envEntry[4];
>
>
> for (i = 0; i < 4; ++i) {
> envEntry[i] = calloc(2 * ARGV_SIZE, 1);
> }
> sprintf(envEntry[0], "POSTPORT=%d", PostPortName);
> putenv(envEntry[0]);
>
> ...
> }
Well, I've got the original postgres 4.2 lying around and it indeed uses the
method as described by the first poster. There has been a patch (I think) by
aoki that changed this to use calloc()ed strings.
The disadvantage of the new method, at least the way it is implemented now,
is that it introduces a memory leak. Which is rather a nuisance in a
potentially never-ending process like the postmaster. (but then, I'm sure it
is not the only one... <wry grin>)
--
__/__/__/__/ Tom Hageman <tom@basil.icce.rug.nl> [NeXTmail/Mime OK]
__/ __/_/ IC Group <tom@icgned.nl> (work)
__/__/__/ "...to baldly go where no one has gone before."
__/ _/_/ -- star trek TNG
==============================================================================
To add/remove yourself to/from the POSTGRES mailing list: send mail with
the subject line ADD or DEL to "postgres-request@postgres.Berkeley.EDU".
If this fails, send mail to "post_questions@postgres.Berkeley.EDU" and
a human will deal with it. DO NOT post to the "postgres" mailing list.
==============================================================================
URL: http://s2k-ftp.CS.Berkeley.EDU:8000/postgres/
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: postgres@postgres.berkeley.edu
Cc: tom@basil.icce.rug.nl, rp2y@methi.ndim.edrc.cmu.edu, sns@asterix.cs.unipune.ernet.in
Subject: Re: putenv in postmaster.c
In-Reply-To: <9507121650.AA01107@basil.icce.rug.nl>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox