From: Bruce Momjian Date: Tue, 23 May 2006 22:13:19 +0000 (+0000) Subject: Add PQisthreadsafe() to libpq, to allow library applications to query X-Git-Tag: REL8_2_BETA1~929 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c1d4551ae1d63cfbff5db7b5fdec94f0357dff7b;p=postgresql Add PQisthreadsafe() to libpq, to allow library applications to query the thread-safety status of the library. --- diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml index 0c24f2b773..229e9d5a28 100644 --- a/doc/src/sgml/libpq.sgml +++ b/doc/src/sgml/libpq.sgml @@ -1,4 +1,4 @@ - + <application>libpq</application> - C Library @@ -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 src/Makefile.global for PTHREAD_CFLAGS -and PTHREAD_LIBS. +and PTHREAD_LIBS. This function allows the querying of +libpq's thread-safe status: + + +PQisthreadsafePQisthreadsafe + + + Returns the thread safety status of the libpq + library. + +int PQisthreadsafe(); + + + + + Returns 1 if the libpq is thead-safe and + 0 if it is not. + + + + + -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 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 diff --git a/src/interfaces/libpq/exports.txt b/src/interfaces/libpq/exports.txt index 7fcd43b01a..b50d062c0b 100644 --- a/src/interfaces/libpq/exports.txt +++ b/src/interfaces/libpq/exports.txt @@ -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 + diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c index 3139398946..7b999c8533 100644 --- a/src/interfaces/libpq/fe-exec.c +++ b/src/interfaces/libpq/fe-exec.c @@ -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) diff --git a/src/interfaces/libpq/libpq-fe.h b/src/interfaces/libpq/libpq-fe.h index c309448bac..3b824efe85 100644 --- a/src/interfaces/libpq/libpq-fe.h +++ b/src/interfaces/libpq/libpq-fe.h @@ -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);