Commit 02d847fe authored by Bruce Momjian's avatar Bruce Momjian

Add --with-threads configure option to control threaded libpq.

parent 26188e8c
...@@ -855,6 +855,7 @@ Optional Packages: ...@@ -855,6 +855,7 @@ Optional Packages:
--with-libraries=DIRS look for additional libraries in DIRS --with-libraries=DIRS look for additional libraries in DIRS
--with-libs=DIRS alternative spelling of --with-libraries --with-libs=DIRS alternative spelling of --with-libraries
--with-pgport=PORTNUM change default port number 5432 --with-pgport=PORTNUM change default port number 5432
--with-threads allow libpq to be thread-safe
--with-tcl build Tcl and Tk interfaces --with-tcl build Tcl and Tk interfaces
--without-tk do not build Tk interfaces if Tcl is enabled --without-tk do not build Tk interfaces if Tcl is enabled
--with-tclconfig=DIR tclConfig.sh and tkConfig.sh are in DIR --with-tclconfig=DIR tclConfig.sh and tkConfig.sh are in DIR
...@@ -2809,6 +2810,41 @@ echo "$as_me: WARNING: *** Library directory $dir does not exist." >&2;} ...@@ -2809,6 +2810,41 @@ echo "$as_me: WARNING: *** Library directory $dir does not exist." >&2;}
done done
IFS=$ac_save_IFS IFS=$ac_save_IFS
#
# Enable libpq to be thread-safe
#
echo "$as_me:$LINENO: checking allow threaded libpq" >&5
echo $ECHO_N "checking allow threaded libpq... $ECHO_C" >&6
# Check whether --with-threads or --without-threads was given.
if test "${with_threads+set}" = set; then
withval="$with_threads"
case $withval in
yes)
:
;;
no)
:
;;
*)
{ { echo "$as_me:$LINENO: error: no argument expected for --with-threads option" >&5
echo "$as_me: error: no argument expected for --with-threads option" >&2;}
{ (exit 1); exit 1; }; }
;;
esac
else
with_threads=no
fi;
echo "$as_me:$LINENO: result: $with_threads" >&5
echo "${ECHO_T}$with_threads" >&6
# #
# Tcl/Tk # Tcl/Tk
# #
...@@ -3550,7 +3586,7 @@ rm -f conftest* ...@@ -3550,7 +3586,7 @@ rm -f conftest*
# #
# Pthreads # Pthreads
# #
if test "$with_threads" = yes; then
echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo "$as_me:$LINENO: checking for ANSI C header files" >&5
echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
if test "${ac_cv_header_stdc+set}" = set; then if test "${ac_cv_header_stdc+set}" = set; then
...@@ -3850,25 +3886,38 @@ echo "${ECHO_T}$ac_cv_header_pthread_h" >&6 ...@@ -3850,25 +3886,38 @@ echo "${ECHO_T}$ac_cv_header_pthread_h" >&6
fi fi
if test $ac_cv_header_pthread_h = yes; then if test $ac_cv_header_pthread_h = yes; then
:
cat >>confdefs.h <<\_ACEOF else
#define HAVE_THREADS 1 { { echo "$as_me:$LINENO: error: pthread.h not found, required for --with-threads" >&5
_ACEOF echo "$as_me: error: pthread.h not found, required for --with-threads" >&2;}
{ (exit 1); exit 1; }; }
fi fi
if test ! -z "$HAVE_THREADS" case $host_os in
then netbsd*|bsdi*)
case $host_os in # these require no special flags or libraries
# BSD/OS and NetBSD require no special libraries or flags ;;
netbsd*|bsdi*) ;;
freebsd2*|freebsd3*|freebsd4*) THREAD_CFLAGS="-pthread" ;; freebsd2*|freebsd3*|freebsd4*) THREAD_CFLAGS="-pthread" ;;
freebsd*) THREAD_LIBS="-lc_r" ;; freebsd*) THREAD_LIBS="-lc_r" ;;
linux*) THREAD_LIBS="-lpthread" linux*) THREAD_LIBS="-lpthread"
THREAD_CFLAGS="-D_REENTRANT" ;; THREAD_CFLAGS="-D_REENTRANT" ;;
# other operating systems might fail because they have pthread.h but need *)
# special libs we don't know about yet. # other operating systems might fail because they have pthread.h but need
# special libs we don't know about yet.
{ { echo "$as_me:$LINENO: error:
Cannot enable threads on your platform.
Please report your platform threading info to the PostgreSQL mailing lists
so it can be added to the next release. Report any compile or link flags,
or libraries required for threading support.
" >&5
echo "$as_me: error:
Cannot enable threads on your platform.
Please report your platform threading info to the PostgreSQL mailing lists
so it can be added to the next release. Report any compile or link flags,
or libraries required for threading support.
" >&2;}
{ (exit 1); exit 1; }; }
esac esac
fi fi
...@@ -17540,6 +17589,7 @@ s,@CPP@,$CPP,;t t ...@@ -17540,6 +17589,7 @@ s,@CPP@,$CPP,;t t
s,@GCC@,$GCC,;t t s,@GCC@,$GCC,;t t
s,@autodepend@,$autodepend,;t t s,@autodepend@,$autodepend,;t t
s,@INCLUDES@,$INCLUDES,;t t s,@INCLUDES@,$INCLUDES,;t t
s,@with_threads@,$with_threads,;t t
s,@with_tcl@,$with_tcl,;t t s,@with_tcl@,$with_tcl,;t t
s,@with_tk@,$with_tk,;t t s,@with_tk@,$with_tk,;t t
s,@with_perl@,$with_perl,;t t s,@with_perl@,$with_perl,;t t
......
dnl Process this file with autoconf to produce a configure script. dnl Process this file with autoconf to produce a configure script.
dnl $Header: /cvsroot/pgsql/configure.in,v 1.260 2003/06/12 16:05:09 tgl Exp $ dnl $Header: /cvsroot/pgsql/configure.in,v 1.261 2003/06/13 23:10:07 momjian Exp $
dnl dnl
dnl Developers, please strive to achieve this order: dnl Developers, please strive to achieve this order:
dnl dnl
...@@ -319,6 +319,14 @@ for dir in $LIBRARY_DIRS $SRCH_LIB; do ...@@ -319,6 +319,14 @@ for dir in $LIBRARY_DIRS $SRCH_LIB; do
done done
IFS=$ac_save_IFS IFS=$ac_save_IFS
#
# Enable libpq to be thread-safe
#
AC_MSG_CHECKING([allow threaded libpq])
PGAC_ARG_BOOL(with, threads, no, [ --with-threads allow libpq to be thread-safe])
AC_MSG_RESULT([$with_threads])
AC_SUBST(with_threads)
# #
# Tcl/Tk # Tcl/Tk
# #
...@@ -544,20 +552,25 @@ AC_SUBST(ELF_SYS) ...@@ -544,20 +552,25 @@ AC_SUBST(ELF_SYS)
# #
# Pthreads # Pthreads
# #
if test "$with_threads" = yes; then
AC_CHECK_HEADER(pthread.h, AC_CHECK_HEADER(pthread.h, [], [AC_MSG_ERROR([pthread.h not found, required for --with-threads])])
[AC_DEFINE(HAVE_THREADS, 1, [Define to 1 if you have the threads interface.])]) case $host_os in
if test ! -z "$HAVE_THREADS" netbsd*|bsdi*)
then # these require no special flags or libraries
case $host_os in ;;
# BSD/OS and NetBSD require no special libraries or flags
netbsd*|bsdi*) ;;
freebsd2*|freebsd3*|freebsd4*) THREAD_CFLAGS="-pthread" ;; freebsd2*|freebsd3*|freebsd4*) THREAD_CFLAGS="-pthread" ;;
freebsd*) THREAD_LIBS="-lc_r" ;; freebsd*) THREAD_LIBS="-lc_r" ;;
linux*) THREAD_LIBS="-lpthread" linux*) THREAD_LIBS="-lpthread"
THREAD_CFLAGS="-D_REENTRANT" ;; THREAD_CFLAGS="-D_REENTRANT" ;;
# other operating systems might fail because they have pthread.h but need *)
# special libs we don't know about yet. # other operating systems might fail because they have pthread.h but need
# special libs we don't know about yet.
AC_MSG_ERROR([
Cannot enable threads on your platform.
Please report your platform threading info to the PostgreSQL mailing lists
so it can be added to the next release. Report any compile or link flags,
or libraries required for threading support.
])
esac esac
fi fi
AC_SUBST(THREAD_LIBS) AC_SUBST(THREAD_LIBS)
......
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/installation.sgml,v 1.133 2003/06/11 06:56:06 momjian Exp $ --> <!-- $Header: /cvsroot/pgsql/doc/src/sgml/installation.sgml,v 1.134 2003/06/13 23:10:07 momjian Exp $ -->
<chapter id="installation"> <chapter id="installation">
<title><![%standalone-include[<productname>PostgreSQL</>]]> <title><![%standalone-include[<productname>PostgreSQL</>]]>
...@@ -914,6 +914,15 @@ JAVACMD=$JAVA_HOME/bin/java ...@@ -914,6 +914,15 @@ JAVACMD=$JAVA_HOME/bin/java
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term><option>--with-threads</option></term>
<listitem>
<para>
Allow separate libpq threads to safely control their private connection handles.
</para>
</listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term><option>--without-zlib</option></term> <term><option>--without-zlib</option></term>
<listitem> <listitem>
......
<!-- <!--
$Header: /cvsroot/pgsql/doc/src/sgml/libpq.sgml,v 1.123 2003/05/14 03:25:58 tgl Exp $ $Header: /cvsroot/pgsql/doc/src/sgml/libpq.sgml,v 1.124 2003/06/13 23:10:07 momjian Exp $
--> -->
<chapter id="libpq"> <chapter id="libpq">
...@@ -509,11 +509,6 @@ typedef struct ...@@ -509,11 +509,6 @@ typedef struct
is leaked for each call to <function>PQconndefaults</function>. is leaked for each call to <function>PQconndefaults</function>.
</para> </para>
<para>
In <productname>PostgreSQL</productname> versions before 7.0, <function>PQconndefaults</function> returned a pointer
to a static array, rather than a dynamically allocated array. That
was not thread-safe, so the behavior has been changed.
</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
...@@ -2549,17 +2544,23 @@ If the permissions are less strict than this, the file will be ignored. ...@@ -2549,17 +2544,23 @@ If the permissions are less strict than this, the file will be ignored.
</indexterm> </indexterm>
<para> <para>
<application>libpq</application> is thread-safe as of <application>libpq</application> is thread-safe if the library is
<productname>PostgreSQL</productname> 7.0, so long as no two threads compiled using the <literal>--with-threads</>
attempt to manipulate the same <structname>PGconn</> object at the same <filename>configure</filename> command-line option. (You might need to
time. In particular, you cannot issue concurrent commands from different use other threading command-line options to compile your client code.)
threads through the same connection object. (If you need to run </para>
concurrent commands, start up multiple connections.)
<para>
One 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, start up
multiple connections.)
</para> </para>
<para> <para>
<structname>PGresult</> objects are read-only after creation, and so can be passed around <structname>PGresult</> objects are read-only after creation, and so can be
freely between threads. passed around freely between threads.
</para> </para>
<para> <para>
......
...@@ -468,9 +468,6 @@ ...@@ -468,9 +468,6 @@
/* Define to 1 if you have the <termios.h> header file. */ /* Define to 1 if you have the <termios.h> header file. */
#undef HAVE_TERMIOS_H #undef HAVE_TERMIOS_H
/* Define to 1 if you have the threads interface. */
#undef HAVE_THREADS
/* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use /* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use
`HAVE_STRUCT_TM_TM_ZONE' instead. */ `HAVE_STRUCT_TM_TM_ZONE' instead. */
#undef HAVE_TM_ZONE #undef HAVE_TM_ZONE
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment