Thread configure flag - Mailing list pgsql-patches

From Bruce Momjian
Subject Thread configure flag
Date
Msg-id 200306132309.h5DN9ch04049@candle.pha.pa.us
Whole thread Raw
Responses Re: Thread configure flag
List pgsql-patches
This applied patch adds --with-threads to configure.  This will soon be
hooked into libpq.  Doc additions made too.

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
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 ----

pgsql-patches by date:

Previous
From: Lee Kindness
Date:
Subject: Re: [HACKERS] PostgreSQL libraries - PThread Support, but
Next
From: Bruce Momjian
Date:
Subject: Re: [HACKERS] PostgreSQL libraries - PThread Support, but