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-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;}
|
|||||||
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*
|
|||||||
#
|
#
|
||||||
# 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
|
|||||||
|
|
||||||
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
|
|||||||
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
|
||||||
|
35
configure.in
35
configure.in
@ -1,5 +1,5 @@
|
|||||||
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
|
|||||||
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)
|
|||||||
#
|
#
|
||||||
# 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)
|
||||||
|
@ -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">
|
<chapter id="installation">
|
||||||
<title><![%standalone-include[<productname>PostgreSQL</>]]>
|
<title><![%standalone-include[<productname>PostgreSQL</>]]>
|
||||||
@ -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>
|
||||||
|
@ -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">
|
<chapter id="libpq">
|
||||||
@ -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.
|
|||||||
</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
|
|
||||||
concurrent commands, start up multiple connections.)
|
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
<structname>PGresult</> objects are read-only after creation, and so can be passed around
|
One restriction is that no two threads attempt to manipulate the same
|
||||||
freely between threads.
|
<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>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user