OSDN Git Service

Add PQisthreadsafe() to libpq, to allow library applications to query
authorBruce Momjian <bruce@momjian.us>
Tue, 23 May 2006 22:13:19 +0000 (22:13 +0000)
committerBruce Momjian <bruce@momjian.us>
Tue, 23 May 2006 22:13:19 +0000 (22:13 +0000)
the thread-safety status of the library.

doc/src/sgml/libpq.sgml
src/interfaces/libpq/exports.txt
src/interfaces/libpq/fe-exec.c
src/interfaces/libpq/libpq-fe.h

index 0c24f2b..229e9d5 100644 (file)
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/libpq.sgml,v 1.210 2006/05/21 20:19:23 tgl Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/libpq.sgml,v 1.211 2006/05/23 22:13:19 momjian Exp $ -->
 
  <chapter id="libpq">
   <title><application>libpq</application> - C Library</title>
@@ -4196,11 +4196,32 @@ options when you compile your application code.  Refer to your
 system's documentation for information about how to build
 thread-enabled applications, or look in 
 <filename>src/Makefile.global</filename> for <literal>PTHREAD_CFLAGS</>
-and <literal>PTHREAD_LIBS</>.
+and <literal>PTHREAD_LIBS</>.  This function allows the querying of
+<application>libpq</application>'s thread-safe status:
 </para>
 
+<variablelist>
+<varlistentry>
+<term><function>PQisthreadsafe</function><indexterm><primary>PQisthreadsafe</></></term>
+<listitem>
+<para>
+       Returns the thread safety status of the <application>libpq</application>
+       library.
+<synopsis>
+int PQisthreadsafe();
+</synopsis>
+</para>
+
+<para>
+       Returns 1 if the <application>libpq</application> is thead-safe and
+       0 if it is not.
+</para>
+</listitem>
+</varlistentry>
+</variablelist>
+
 <para>
-One restriction is that no two threads attempt to manipulate the same
+One thread restriction is that no two threads attempt to manipulate the same
 <structname>PGconn</> object at the same time. In particular, you cannot
 issue concurrent commands from different threads through the same
 connection object. (If you need to run concurrent commands, use
index 7fcd43b..b50d062 100644 (file)
@@ -1,4 +1,4 @@
-# $PostgreSQL: pgsql/src/interfaces/libpq/exports.txt,v 1.8 2006/05/21 20:19:23 tgl Exp $
+# $PostgreSQL: pgsql/src/interfaces/libpq/exports.txt,v 1.9 2006/05/23 22:13:19 momjian Exp $
 # Functions to be exported by libpq DLLs
 PQconnectdb               1
 PQsetdbLogin              2
@@ -128,3 +128,5 @@ PQregisterThreadLock      125
 PQescapeStringConn        126
 PQescapeByteaConn         127
 PQencryptPassword         128
+PQisthreadsafe            129
+
index 3139398..7b999c8 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/interfaces/libpq/fe-exec.c,v 1.183 2006/05/21 20:19:23 tgl Exp $
+ *       $PostgreSQL: pgsql/src/interfaces/libpq/fe-exec.c,v 1.184 2006/05/23 22:13:19 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -2343,6 +2343,18 @@ PQisnonblocking(const PGconn *conn)
        return pqIsnonblocking(conn);
 }
 
+/* libpq is thread-safe? */
+int
+PQisthreadsafe(void)
+{
+#ifdef ENABLE_THREAD_SAFETY
+       return true;
+#else
+       return false;
+#endif
+}
+
+
 /* try to force data out, really only useful for non-blocking users */
 int
 PQflush(PGconn *conn)
index c309448..3b824ef 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/interfaces/libpq/libpq-fe.h,v 1.128 2006/05/21 20:19:23 tgl Exp $
+ * $PostgreSQL: pgsql/src/interfaces/libpq/libpq-fe.h,v 1.129 2006/05/23 22:13:19 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -366,6 +366,7 @@ extern int  PQendcopy(PGconn *conn);
 /* Set blocking/nonblocking connection to the backend */
 extern int     PQsetnonblocking(PGconn *conn, int arg);
 extern int     PQisnonblocking(const PGconn *conn);
+extern int     PQisthreadsafe(void);
 
 /* Force the write buffer to be written (or at least try) */
 extern int     PQflush(PGconn *conn);