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 ---------------------------(end of broadcast)--------------------------- TIP 7: You can help support the PostgreSQL project by donating at http://www.postgresql.org/about/donate