Re: libpq docs about PQfreemem

From: Magnus Hagander <magnus(at)hagander(dot)net>
To: Bruce Momjian <bruce(at)momjian(dot)us>
Cc: PGSQL Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: libpq docs about PQfreemem
Date: 2007-02-06 08:22:47
Message-ID: 20070206082247.GF6515@svr2.hagander.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Mon, Feb 05, 2007 at 05:21:34PM -0500, Bruce Momjian wrote:
> Magnus Hagander wrote:
> > have this about PQfreemem():
> >
> > Frees memory allocated by <application>libpq</>, particularly
> > <function>PQescapeByteaConn</function>,
> > <function>PQescapeBytea</function>,
> > <function>PQunescapeBytea</function>,
> > and <function>PQnotifies</function>.
> > It is needed by Microsoft Windows, which cannot free memory across
> > DLLs, unless multithreaded DLLs (<option>/MD</option> in VC6) are used.
> > On other platforms, this function is the same as the standard library
> > function <function>free()</>.
> > </para>
> >
> >
> >
> > That's also a very old comment, dating back to when we could build libpq
> > with VC6 only and nothing else. Now we can build with MinGW, Borland,
> > VC2005 and I think also VC2003. Which would add the note that this is
> > also depending on *which compiler* and *which compiler version*.
> > The /MD mention is just one of several different options to select the
> > runtime libraries, so it seems really misplaced.
> >
> > Now, there are two options for this. Either we fix it (I can put
> > together a patch), or we remove it altogether. To me, it seems to be
> > just an implementation detail and some kind of explanation why we're
> > doing it - which would live better in a source code comment than in the
> > docs.
> > This includes the part about how it's just the same as free() on other
> > platforms. That's just an implementation detail, and I assume we don't
> > want people to rely on that - in case we ever want to change it in the
> > future for some reason. (the doc for the other functions say you have to
> > use PQfreemem without mentioning any exceptions)
> >
> > Thoughts? Rip out or update?
>
> Are you saying that almost all Win32 binaries and libraries now can free
> across DLLs?

No, I'm saying that the problem is not just between multithreaded and
not, it's depending on a lot other factors as well. It's actuallyi the
same issue as with PQtrace, which has a better explanation.

FOr example, you can't free() a poniter allocated with the MSVC runtime
library if you're using the Borland runtime librarys version of free().

//Magnus

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message jon5pg 2007-02-06 09:22:07 Re: Pl/pgsql functions causing crashes in 8.2.2
Previous Message Jonathan Gray 2007-02-06 07:46:13 Pl/pgsql functions causing crashes in 8.2.2