OK, patch applied to document PQfreemem() for notify.
PQfreeNotify wasn't even documented, but I kept it in for binary
compatibility, and added a #define to map it to PQfreemem().
I updated various interfaces to use PQfreemem() rather than free().
---------------------------------------------------------------------------
Peter Eisentraut wrote:
> Bruce Momjian writes:
>
> > The problem with that is the new versions are still going to reference
> > PQfreeNotify, and then we still can't remove it. I think we need the
> > macro for PQfreeNotify pointing to PQfreemem, but keep the PQfreeNotify
> > function around for a release or two, then remove it, and remove all
> > documentation about it in 7.4.
>
> Too complicated. Just implement PQfreemem independently and tell people
> to use it. Please don't remove documentation just because a feature is
> deprecated. How are people supposed to do the conversion if they can't
> find information about what they are supposed to convert from?
>
> --
> Peter Eisentraut [EMAIL PROTECTED]
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster
>
--
Bruce Momjian | http://candle.pha.pa.us
[EMAIL PROTECTED] | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073
Index: doc/src/sgml/libpq.sgml
===================================================================
RCS file: /cvsroot/pgsql-server/doc/src/sgml/libpq.sgml,v
retrieving revision 1.115
diff -c -c -r1.115 libpq.sgml
*** doc/src/sgml/libpq.sgml 24 Mar 2003 18:33:52 -0000 1.115
--- doc/src/sgml/libpq.sgml 25 Mar 2003 02:40:07 -0000
***************
*** 1049,1056 ****
<function>PQescapeString</> performs this operation.
</para>
<para>
! The
! parameter <parameter>from</> points to the first character of the string that
is to be escaped, and the <parameter>length</> parameter counts the
number of characters in this string. (A terminating zero byte is
neither necessary nor counted.) <parameter>to</> shall point to a
--- 1049,1055 ----
<function>PQescapeString</> performs this operation.
</para>
<para>
! The parameter <parameter>from</> points to the first character of the string that
is to be escaped, and the <parameter>length</> parameter counts the
number of characters in this string. (A terminating zero byte is
neither necessary nor counted.) <parameter>to</> shall point to a
***************
*** 1117,1123 ****
<para>
<function>PQescapeBytea</> returns an escaped version of the
! <parameter>from</parameter> parameter binary string in memory allocated with
<function>malloc()</>.
The return string has all special characters replaced
so that they can be properly processed by the PostgreSQL string literal
parser, and the <type>bytea</type> input function. A terminating zero
--- 1116,1124 ----
<para>
<function>PQescapeBytea</> returns an escaped version of the
! <parameter>from</parameter> parameter binary string in memory
! allocated with <function>malloc()</>, and must be freed using
! <function>PQfreemem()</>.
The return string has all special characters replaced
so that they can be properly processed by the PostgreSQL string literal
parser, and the <type>bytea</type> input function. A terminating zero
***************
*** 1143,1150 ****
such as might be returned by <function>PQgetvalue</function> when applied to a
<type>bytea</type> column. <function>PQunescapeBytea</function> converts
this string representation into its binary representation.
! It returns a pointer to a buffer allocated with <function>malloc()</function>, or
null on error, and puts the size
! of the buffer in <parameter>to_length</parameter>.
</para>
</listitem>
</varlistentry>
--- 1144,1154 ----
such as might be returned by <function>PQgetvalue</function> when applied to a
<type>bytea</type> column. <function>PQunescapeBytea</function> converts
this string representation into its binary representation.
! It returns a pointer to a buffer allocated with
! <function>malloc()</function>, or null on error, and puts the size of
! the buffer in <parameter>to_length</parameter>. The memory must be
! freed using <function>PQfreemem()</>.
!
</para>
</listitem>
</varlistentry>
***************
*** 1161,1167 ****
<para>
Frees memory allocated by <application>libpq</>, particularly
! <function>PQescapeBytea</function> and <function>PQunescapeBytea</function>.
It is needed by Win32, which can not free memory across
DLL's, unless multithreaded DLL's (/MD in VC6) are used.
</para>
--- 1165,1173 ----
<para>
Frees memory allocated by <application>libpq</>, particularly
! <function>PQescapeBytea</function>,
! <function>PQunescapeBytea</function>,
! and <function>PQnotifies</function>.
It is needed by Win32, which can not free memory across
DLL's, unless multithreaded DLL's (/MD in VC6) are used.
</para>
***************
*** 1926,1932 ****
} PGnotify;
</synopsis>
After processing a <structname>PGnotify</structname> object returned by
<function>PQnotifies</function>,
! be sure to free it with <function>free()</function> to avoid a memory leak.
</para>
<note>
--- 1932,1938 ----
} PGnotify;
</synopsis>
After processing a <structname>PGnotify</structname> object returned by
<function>PQnotifies</function>,
! be sure to free it with <function>PQfreemem()</function>.
</para>
<note>
***************
*** 2867,2873 ****
fprintf(stderr,
"ASYNC NOTIFY of '%s' from backend pid '%d' received\n",
notify->relname, notify->be_pid);
! free(notify);
}
}
--- 2873,2879 ----
fprintf(stderr,
"ASYNC NOTIFY of '%s' from backend pid '%d' received\n",
notify->relname, notify->be_pid);
! PQfreemem(notify);
}
}
Index: src/bin/psql/common.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/psql/common.c,v
retrieving revision 1.61
diff -c -c -r1.61 common.c
*** src/bin/psql/common.c 20 Mar 2003 15:39:52 -0000 1.61
--- src/bin/psql/common.c 25 Mar 2003 02:40:08 -0000
***************
*** 441,447 ****
{
fprintf(pset.queryFout, gettext("Asynchronous NOTIFY '%s' from backend
with pid %d received.\n"),
notify->relname, notify->be_pid);
! free(notify);
fflush(pset.queryFout);
}
}
--- 441,447 ----
{
fprintf(pset.queryFout, gettext("Asynchronous NOTIFY '%s' from backend
with pid %d received.\n"),
notify->relname, notify->be_pid);
! PQfreemem(notify);
fflush(pset.queryFout);
}
}
Index: src/interfaces/ecpg/ecpglib/execute.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/interfaces/ecpg/ecpglib/execute.c,v
retrieving revision 1.4
diff -c -c -r1.4 execute.c
*** src/interfaces/ecpg/ecpglib/execute.c 20 Mar 2003 15:56:50 -0000 1.4
--- src/interfaces/ecpg/ecpglib/execute.c 25 Mar 2003 02:40:10 -0000
***************
*** 1197,1203 ****
{
ECPGlog("ECPGexecute line %d: ASYNC NOTIFY of '%s' from backend pid
'%d' received\n",
stmt->lineno, notify->relname, notify->be_pid);
! ECPGfree(notify);
}
return status;
--- 1197,1203 ----
{
ECPGlog("ECPGexecute line %d: ASYNC NOTIFY of '%s' from backend pid
'%d' received\n",
stmt->lineno, notify->relname, notify->be_pid);
! PQfreemem(notify);
}
return status;
Index: src/interfaces/libpgtcl/pgtclId.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/interfaces/libpgtcl/pgtclId.c,v
retrieving revision 1.40
diff -c -c -r1.40 pgtclId.c
*** src/interfaces/libpgtcl/pgtclId.c 1 Feb 2003 00:22:12 -0000 1.40
--- src/interfaces/libpgtcl/pgtclId.c 25 Mar 2003 02:40:11 -0000
***************
*** 554,560 ****
if (event->connid == NULL)
{
if (event->notify)
! PQfreeNotify(event->notify);
return 1;
}
--- 554,560 ----
if (event->connid == NULL)
{
if (event->notify)
! PQfreemem(event->notify);
return 1;
}
***************
*** 634,640 ****
Tcl_Release((ClientData) event->connid);
if (event->notify)
! PQfreeNotify(event->notify);
return 1;
}
--- 634,640 ----
Tcl_Release((ClientData) event->connid);
if (event->notify)
! PQfreemem(event->notify);
return 1;
}
Index: src/interfaces/libpq/fe-exec.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/interfaces/libpq/fe-exec.c,v
retrieving revision 1.127
diff -c -c -r1.127 fe-exec.c
*** src/interfaces/libpq/fe-exec.c 22 Mar 2003 03:29:06 -0000 1.127
--- src/interfaces/libpq/fe-exec.c 25 Mar 2003 02:40:15 -0000
***************
*** 1578,1597 ****
}
/*
- * PQfreeNotify - free's the memory associated with a PGnotify
- *
- * This function is needed on Windows when using libpq.dll and
- * for example libpgtcl.dll: All memory allocated inside a dll
- * should be freed in the context of the same dll.
- *
- */
- void
- PQfreeNotify(PGnotify *notify)
- {
- free(notify);
- }
-
- /*
* PQgetline - gets a newline-terminated string from the backend.
*
* Chiefly here so that applications can use "COPY <rel> to stdout"
--- 1578,1583 ----
***************
*** 2470,2472 ****
--- 2456,2477 ----
{
return pqSendSome(conn);
}
+
+ /*
+ * PQfreeNotify - free's the memory associated with a PGnotify
+ *
+ * This function is here only for binary backward compatibility.
+ * New code should use PQfreemem(). A macro will automatically map
+ * calls to PQfreemem. It should be removed in the future. bjm 2003-03-24
+ */
+
+ #undef PQfreeNotify
+ void PQfreeNotify(PGnotify *notify);
+
+ void
+ PQfreeNotify(PGnotify *notify)
+ {
+ PQfreemem(notify);
+ }
+
+
Index: src/interfaces/libpq/libpq-fe.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/interfaces/libpq/libpq-fe.h,v
retrieving revision 1.90
diff -c -c -r1.90 libpq-fe.h
*** src/interfaces/libpq/libpq-fe.h 22 Mar 2003 03:29:06 -0000 1.90
--- src/interfaces/libpq/libpq-fe.h 25 Mar 2003 02:40:16 -0000
***************
*** 260,266 ****
/* Simple synchronous query */
extern PGresult *PQexec(PGconn *conn, const char *query);
extern PGnotify *PQnotifies(PGconn *conn);
! extern void PQfreeNotify(PGnotify *notify);
/* Interface for multiple-result or asynchronous queries */
extern int PQsendQuery(PGconn *conn, const char *query);
--- 260,267 ----
/* Simple synchronous query */
extern PGresult *PQexec(PGconn *conn, const char *query);
extern PGnotify *PQnotifies(PGconn *conn);
! /* Exists for backward compatibility. bjm 2003-03-24 */
! #define PQfreeNotify(ptr) PQfreemem(ptr)
/* Interface for multiple-result or asynchronous queries */
extern int PQsendQuery(PGconn *conn, const char *query);
Index: src/interfaces/python/pgmodule.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/interfaces/python/pgmodule.c,v
retrieving revision 1.44
diff -c -c -r1.44 pgmodule.c
*** src/interfaces/python/pgmodule.c 10 Mar 2003 22:28:22 -0000 1.44
--- src/interfaces/python/pgmodule.c 25 Mar 2003 02:40:18 -0000
***************
*** 2066,2072 ****
}
PyTuple_SET_ITEM(notify_result, 1, temp);
! free(notify);
}
else
{
--- 2066,2072 ----
}
PyTuple_SET_ITEM(notify_result, 1, temp);
! PQfreemem(notify);
}
else
{
Index: src/test/examples/testlibpq2.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/test/examples/testlibpq2.c,v
retrieving revision 1.7
diff -c -c -r1.7 testlibpq2.c
*** src/test/examples/testlibpq2.c 7 Feb 1999 22:08:54 -0000 1.7
--- src/test/examples/testlibpq2.c 25 Mar 2003 02:40:18 -0000
***************
*** 98,104 ****
fprintf(stderr,
"ASYNC NOTIFY of '%s' from backend pid '%d'
received\n",
notify->relname, notify->be_pid);
! free(notify);
break;
}
PQclear(res);
--- 98,104 ----
fprintf(stderr,
"ASYNC NOTIFY of '%s' from backend pid '%d'
received\n",
notify->relname, notify->be_pid);
! PQfreemem(notify);
break;
}
PQclear(res);
---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to [EMAIL PROTECTED] so that your
message can get through to the mailing list cleanly