Index: configure
===================================================================
RCS file: /cvsroot/pgsql-server/configure,v
retrieving revision 1.269
diff -c -c -r1.269 configure
*** configure	12 Jun 2003 16:05:09 -0000	1.269
--- configure	13 Jun 2003 23:04:32 -0000
***************
*** 855,860 ****
--- 855,861 ----
    --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
***************
*** 2810,2815 ****
--- 2811,2851 ----
  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
  #
  echo "$as_me:$LINENO: checking whether to build with Tcl" >&5
***************
*** 3550,3556 ****
  #
  # Pthreads
  #
! 
  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
--- 3586,3592 ----
  #
  # 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,3874 ****
  
  fi
  if test $ac_cv_header_pthread_h = yes; then
! 
! cat >>confdefs.h <<\_ACEOF
! #define HAVE_THREADS 1
! _ACEOF
! 
  fi
  
  
! if test ! -z "$HAVE_THREADS"
! then
! 	case $host_os in
! 		# BSD/OS and NetBSD require no special libraries or flags
! 		netbsd*|bsdi*) ;;
  		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.
  	esac
  fi
  
--- 3886,3923 ----
  
  fi
  if test $ac_cv_header_pthread_h = yes; then
!   :
! 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
  
  
! 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.
! 			{ { 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,17545 ****
--- 17589,17595 ----
  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
Index: configure.in
===================================================================
RCS file: /cvsroot/pgsql-server/configure.in,v
retrieving revision 1.260
diff -c -c -r1.260 configure.in
*** configure.in	12 Jun 2003 16:05:09 -0000	1.260
--- configure.in	13 Jun 2003 23:04:34 -0000
***************
*** 320,325 ****
--- 320,333 ----
  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
  #
  AC_MSG_CHECKING([whether to build with Tcl])
***************
*** 544,563 ****
  #
  # 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*) ;;
  		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.
  	esac
  fi
  AC_SUBST(THREAD_LIBS)
--- 552,576 ----
  #
  # Pthreads
  #
! 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.
! 			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)
Index: doc/src/sgml/installation.sgml
===================================================================
RCS file: /cvsroot/pgsql-server/doc/src/sgml/installation.sgml,v
retrieving revision 1.133
diff -c -c -r1.133 installation.sgml
*** doc/src/sgml/installation.sgml	11 Jun 2003 06:56:06 -0000	1.133
--- doc/src/sgml/installation.sgml	13 Jun 2003 23:04:36 -0000
***************
*** 915,920 ****
--- 915,929 ----
        </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>
          <para>
Index: doc/src/sgml/libpq.sgml
===================================================================
RCS file: /cvsroot/pgsql-server/doc/src/sgml/libpq.sgml,v
retrieving revision 1.123
diff -c -c -r1.123 libpq.sgml
*** doc/src/sgml/libpq.sgml	14 May 2003 03:25:58 -0000	1.123
--- doc/src/sgml/libpq.sgml	13 Jun 2003 23:04:39 -0000
***************
*** 509,519 ****
      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>
  
--- 509,514 ----
***************
*** 2549,2565 ****
  </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.)
  </para>
  
  <para>
! <structname>PGresult</> objects are read-only after creation, and so can be passed around
! freely between threads.
  </para>
  
  <para>
--- 2544,2566 ----
  </indexterm>
  
  <para>
! <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>
! 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>
Index: src/include/pg_config.h.in
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/pg_config.h.in,v
retrieving revision 1.50
diff -c -c -r1.50 pg_config.h.in
*** src/include/pg_config.h.in	12 Jun 2003 07:36:51 -0000	1.50
--- src/include/pg_config.h.in	13 Jun 2003 23:04:41 -0000
***************
*** 468,476 ****
  /* 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
--- 468,473 ----
