mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-24 18:55:04 +08:00
Add --with-threads configure option to control threaded libpq.
This commit is contained in:
parent
26188e8c17
commit
02d847fe9f
76
configure
vendored
76
configure
vendored
@ -855,6 +855,7 @@ Optional Packages:
|
||||
--with-libraries=DIRS look for additional libraries in DIRS
|
||||
--with-libs=DIRS alternative spelling of --with-libraries
|
||||
--with-pgport=PORTNUM change default port number 5432
|
||||
--with-threads allow libpq to be thread-safe
|
||||
--with-tcl build Tcl and Tk interfaces
|
||||
--without-tk do not build Tk interfaces if Tcl is enabled
|
||||
--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;}
|
||||
done
|
||||
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
|
||||
#
|
||||
@ -3550,7 +3586,7 @@ rm -f conftest*
|
||||
#
|
||||
# Pthreads
|
||||
#
|
||||
|
||||
if test "$with_threads" = yes; then
|
||||
echo "$as_me:$LINENO: checking for ANSI C header files" >&5
|
||||
echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
|
||||
if test "${ac_cv_header_stdc+set}" = set; then
|
||||
@ -3850,25 +3886,38 @@ echo "${ECHO_T}$ac_cv_header_pthread_h" >&6
|
||||
|
||||
fi
|
||||
if test $ac_cv_header_pthread_h = yes; then
|
||||
|
||||
cat >>confdefs.h <<\_ACEOF
|
||||
#define HAVE_THREADS 1
|
||||
_ACEOF
|
||||
|
||||
:
|
||||
else
|
||||
{ { echo "$as_me:$LINENO: error: pthread.h not found, required for --with-threads" >&5
|
||||
echo "$as_me: error: pthread.h not found, required for --with-threads" >&2;}
|
||||
{ (exit 1); exit 1; }; }
|
||||
fi
|
||||
|
||||
|
||||
if test ! -z "$HAVE_THREADS"
|
||||
then
|
||||
case $host_os in
|
||||
# BSD/OS and NetBSD require no special libraries or flags
|
||||
netbsd*|bsdi*) ;;
|
||||
case $host_os in
|
||||
netbsd*|bsdi*)
|
||||
# these require no special flags or libraries
|
||||
;;
|
||||
freebsd2*|freebsd3*|freebsd4*) THREAD_CFLAGS="-pthread" ;;
|
||||
freebsd*) THREAD_LIBS="-lc_r" ;;
|
||||
linux*) THREAD_LIBS="-lpthread"
|
||||
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
|
||||
fi
|
||||
|
||||
@ -17540,6 +17589,7 @@ s,@CPP@,$CPP,;t t
|
||||
s,@GCC@,$GCC,;t t
|
||||
s,@autodepend@,$autodepend,;t t
|
||||
s,@INCLUDES@,$INCLUDES,;t t
|
||||
s,@with_threads@,$with_threads,;t t
|
||||
s,@with_tcl@,$with_tcl,;t t
|
||||
s,@with_tk@,$with_tk,;t t
|
||||
s,@with_perl@,$with_perl,;t t
|
||||
|
35
configure.in
35
configure.in
@ -1,5 +1,5 @@
|
||||
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 Developers, please strive to achieve this order:
|
||||
dnl
|
||||
@ -319,6 +319,14 @@ for dir in $LIBRARY_DIRS $SRCH_LIB; do
|
||||
done
|
||||
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
|
||||
#
|
||||
@ -544,20 +552,25 @@ AC_SUBST(ELF_SYS)
|
||||
#
|
||||
# Pthreads
|
||||
#
|
||||
|
||||
AC_CHECK_HEADER(pthread.h,
|
||||
[AC_DEFINE(HAVE_THREADS, 1, [Define to 1 if you have the threads interface.])])
|
||||
if test ! -z "$HAVE_THREADS"
|
||||
then
|
||||
case $host_os in
|
||||
# BSD/OS and NetBSD require no special libraries or flags
|
||||
netbsd*|bsdi*) ;;
|
||||
if test "$with_threads" = yes; then
|
||||
AC_CHECK_HEADER(pthread.h, [], [AC_MSG_ERROR([pthread.h not found, required for --with-threads])])
|
||||
case $host_os in
|
||||
netbsd*|bsdi*)
|
||||
# these require no special flags or libraries
|
||||
;;
|
||||
freebsd2*|freebsd3*|freebsd4*) THREAD_CFLAGS="-pthread" ;;
|
||||
freebsd*) THREAD_LIBS="-lc_r" ;;
|
||||
linux*) THREAD_LIBS="-lpthread"
|
||||
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
|
||||
fi
|
||||
AC_SUBST(THREAD_LIBS)
|
||||
|
@ -1,4 +1,4 @@
|
||||
<!-- $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">
|
||||
<title><![%standalone-include[<productname>PostgreSQL</>]]>
|
||||
@ -914,6 +914,15 @@ JAVACMD=$JAVA_HOME/bin/java
|
||||
</listitem>
|
||||
</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>
|
||||
<term><option>--without-zlib</option></term>
|
||||
<listitem>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<!--
|
||||
$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">
|
||||
@ -509,11 +509,6 @@ typedef struct
|
||||
is leaked for each call to <function>PQconndefaults</function>.
|
||||
</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>
|
||||
</varlistentry>
|
||||
|
||||
@ -2549,17 +2544,23 @@ If the permissions are less strict than this, the file will be ignored.
|
||||
</indexterm>
|
||||
|
||||
<para>
|
||||
<application>libpq</application> is thread-safe as of
|
||||
<productname>PostgreSQL</productname> 7.0, so long as 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.)
|
||||
<application>libpq</application> is thread-safe if the library is
|
||||
compiled using the <literal>--with-threads</>
|
||||
<filename>configure</filename> command-line option. (You might need to
|
||||
use other threading command-line options to compile your client code.)
|
||||
</para>
|
||||
|
||||
<para>
|
||||
<structname>PGresult</> objects are read-only after creation, and so can be passed around
|
||||
freely between threads.
|
||||
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>
|
||||
<structname>PGresult</> objects are read-only after creation, and so can be
|
||||
passed around freely between threads.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
|
@ -468,9 +468,6 @@
|
||||
/* Define to 1 if you have the <termios.h> header file. */
|
||||
#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
|
||||
`HAVE_STRUCT_TM_TM_ZONE' instead. */
|
||||
#undef HAVE_TM_ZONE
|
||||
|
Loading…
Reference in New Issue
Block a user