Tom Lane wrote:
> Bruce Momjian <[email protected]> writes:
> > That is great new information. I have created a new documentation
> > section called "Using C++ for Extensibility", and listed you as the
> > author in the CVS commit; patch attached. Thanks.
>
> Too bad two out of the four pieces of advice are wrong (how many pieces
> of memory managed by the backend are allocated directly with malloc?).
> The other two are not wrong as far as they go, but they're certainly
> woefully inadequate, because no interesting backend extension is going
> to be able to get along without calling back into the core code.
Good point. I assumed others would chime in to improve this.
> Personally I would reduce this section to
>
> <para>
> Don't.
> </para>
>
> I don't think it is worth our time to try to support people who run into
> the inevitable memory management and error handling incompatibilities.
> Nor are they likely to be happy at the end of the experience, if we
> blithely tell them up front that it'll work.
Well, I would have avoided this mine-trap except we have this 9.0
release note item:
Allow use of <productname>C++</> functions in backend code (Kurt
Harriman, Peter Eisentraut)
I figure if we don't provide some guidance, things will be even worse.
I have updated the docs to mention palloc/pfree instead; applied patch
attached.
--
Bruce Momjian <[email protected]> http://momjian.us
EnterpriseDB http://enterprisedb.com
+ None of us is going to be here forever. +
Index: doc/src/sgml/extend.sgml
===================================================================
RCS file: /cvsroot/pgsql/doc/src/sgml/extend.sgml,v
retrieving revision 1.40
diff -c -c -r1.40 extend.sgml
*** doc/src/sgml/extend.sgml 1 Jun 2010 02:35:37 -0000 1.40
--- doc/src/sgml/extend.sgml 1 Jun 2010 02:53:30 -0000
***************
*** 296,309 ****
</listitem>
<listitem>
<para>
! Use <function>malloc()</> to allocate any memory that might be
freed by the backend C code (don't pass <function>new()</>-allocated
memory).
</para>
</listitem>
<listitem>
<para>
! Use <function>free()</> to free memory allocated by the backend
C code (do not use <function>delete()</> for such cases).
</para>
</listitem>
--- 296,309 ----
</listitem>
<listitem>
<para>
! Use <function>palloc()</> to allocate any memory that might be
freed by the backend C code (don't pass <function>new()</>-allocated
memory).
</para>
</listitem>
<listitem>
<para>
! Use <function>pfree()</> to free memory allocated by the backend
C code (do not use <function>delete()</> for such cases).
</para>
</listitem>
--
Sent via pgsql-general mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general