From 8c1c2e38f6806379c46b4f8a85d9a7e0c6f9fc04 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Wed, 2 Dec 2009 14:07:26 +0000 Subject: [PATCH] thread-safety Apply full patch to enable thread-safety by default, e.g. doc changes. --- configure | 93 ++++++---------------------------- configure.in | 42 ++++----------- doc/src/sgml/ecpg.sgml | 9 ++-- doc/src/sgml/installation.sgml | 17 +++---- doc/src/sgml/libpq.sgml | 9 ++-- src/test/thread/README | 15 +++--- 6 files changed, 48 insertions(+), 137 deletions(-) diff --git a/configure b/configure index cfcb6e5c8c..e1212ba2ab 100755 --- a/configure +++ b/configure @@ -823,7 +823,6 @@ with_CC enable_depend enable_cassert enable_thread_safety -enable_thread_safety_force with_tcl with_tclconfig with_perl @@ -1497,9 +1496,7 @@ Optional Features: --enable-dtrace build with DTrace support --enable-depend turn on automatic dependency tracking --enable-cassert enable assertion checks (for debugging) - --disable-thread-safety make client libraries thread-safe - --enable-thread-safety-force - force thread-safety despite thread test failure + --disable-thread-safety disable thread-safety in client libraries --disable-float4-byval disable float4 passed by value --disable-float8-byval disable float8 passed by value --disable-largefile omit support for large files @@ -4884,41 +4881,6 @@ else fi - - - -# Check whether --enable-thread-safety-force was given. -if test "${enable_thread_safety_force+set}" = set; then - enableval=$enable_thread_safety_force; - case $enableval in - yes) - : - ;; - no) - : - ;; - *) - { { $as_echo "$as_me:$LINENO: error: no argument expected for --enable-thread-safety-force option" >&5 -$as_echo "$as_me: error: no argument expected for --enable-thread-safety-force option" >&2;} - { (exit 1); exit 1; }; } - ;; - esac - -else - enable_thread_safety_force=no - -fi - - -if test "$enable_thread_safety" = yes -o \ - "$enable_thread_safety_force" = yes; then - enable_thread_safety="yes" # for 'force' - -cat >>confdefs.h <<\_ACEOF -#define ENABLE_THREAD_SAFETY 1 -_ACEOF - -fi { $as_echo "$as_me:$LINENO: result: $enable_thread_safety" >&5 $as_echo "$enable_thread_safety" >&6; } @@ -21287,10 +21249,10 @@ PTHREAD_CFLAGS="$PTHREAD_CFLAGS -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEM if test "$PTHREAD_CC" != "$CC"; then { { $as_echo "$as_me:$LINENO: error: PostgreSQL does not support platforms that require a special compiler -for thread safety." >&5 +for thread safety; use --disable-thread-safety to disable thread safety." >&5 $as_echo "$as_me: error: PostgreSQL does not support platforms that require a special compiler -for thread safety." >&2;} +for thread safety; use --disable-thread-safety to disable thread safety." >&2;} { (exit 1); exit 1; }; } fi @@ -21436,8 +21398,10 @@ fi if test "x$ac_cv_header_pthread_h" = x""yes; then : else - { { $as_echo "$as_me:$LINENO: error: pthread.h not found, required for --enable-thread-safety" >&5 -$as_echo "$as_me: error: pthread.h not found, required for --enable-thread-safety" >&2;} + { { $as_echo "$as_me:$LINENO: error: +pthread.h not found; use --disable-thread-safety to disable thread safety" >&5 +$as_echo "$as_me: error: +pthread.h not found; use --disable-thread-safety to disable thread safety" >&2;} { (exit 1); exit 1; }; } fi @@ -26349,10 +26313,10 @@ HAVE_POSIX_SIGNALS=$pgac_cv_func_posix_signals if test "$pgac_cv_func_posix_signals" != yes -a "$enable_thread_safety" = yes; then { { $as_echo "$as_me:$LINENO: error: Thread-safety requires POSIX signals, which are not supported by this -operating system." >&5 +operating system; use --disable-thread-safety to disable thread safety." >&5 $as_echo "$as_me: error: Thread-safety requires POSIX signals, which are not supported by this -operating system." >&2;} +operating system; use --disable-thread-safety to disable thread safety." >&2;} { (exit 1); exit 1; }; } fi fi @@ -28202,24 +28166,7 @@ done # We have to run the thread test near the end so we have all our symbols # defined. Cross compiling throws a warning. # -if test "$enable_thread_safety_force" = yes; then -if test "$PORTNAME" != "win32" -then - { $as_echo "$as_me:$LINENO: WARNING: -*** Skipping thread test program. --enable-thread-safety-force was used. -*** Run the program in src/test/thread on the your machine and add proper -*** locking function calls to your applications to guarantee thread safety. -" >&5 -$as_echo "$as_me: WARNING: -*** Skipping thread test program. --enable-thread-safety-force was used. -*** Run the program in src/test/thread on the your machine and add proper -*** locking function calls to your applications to guarantee thread safety. -" >&2;} -else -{ $as_echo "$as_me:$LINENO: WARNING: *** skipping thread test on Win32" >&5 -$as_echo "$as_me: WARNING: *** skipping thread test on Win32" >&2;} -fi -elif test "$enable_thread_safety" = yes; then +if test "$enable_thread_safety" = yes; then if test "$PORTNAME" != "win32" then { $as_echo "$as_me:$LINENO: checking thread safety of required library functions" >&5 @@ -28282,21 +28229,13 @@ sed 's/^/| /' conftest.$ac_ext >&5 { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:$LINENO: error: thread test program failed -This platform is not thread-safe. Check the file 'config.log' for the -exact reason. - -You can use the configure option --enable-thread-safety-force to force -threads to be enabled. But you must then run the program in -src/test/thread and add locking function calls to your applications to -guarantee thread safety." >&5 +This platform is not thread-safe. Check the file 'config.log' or compile +and run src/test/thread/thread_test for the exact reason. +Use --disable-thread-safety to disable thread safety." >&5 $as_echo "$as_me: error: thread test program failed -This platform is not thread-safe. Check the file 'config.log' for the -exact reason. - -You can use the configure option --enable-thread-safety-force to force -threads to be enabled. But you must then run the program in -src/test/thread and add locking function calls to your applications to -guarantee thread safety." >&2;} +This platform is not thread-safe. Check the file 'config.log' or compile +and run src/test/thread/thread_test for the exact reason. +Use --disable-thread-safety to disable thread safety." >&2;} { (exit 1); exit 1; }; } fi rm -rf conftest.dSYM diff --git a/configure.in b/configure.in index 894b6c4bf1..97c3c76b9e 100644 --- a/configure.in +++ b/configure.in @@ -1,5 +1,5 @@ dnl Process this file with autoconf to produce a configure script. -dnl $PostgreSQL: pgsql/configure.in,v 1.614 2009/12/01 23:02:44 momjian Exp $ +dnl $PostgreSQL: pgsql/configure.in,v 1.615 2009/12/02 14:07:25 momjian Exp $ dnl dnl Developers, please strive to achieve this order: dnl @@ -558,15 +558,7 @@ IFS=$ac_save_IFS # Enable thread-safe client libraries # AC_MSG_CHECKING([allow thread-safe client libraries]) -PGAC_ARG_BOOL(enable, thread-safety, yes, [make client libraries thread-safe]) - -PGAC_ARG_BOOL(enable, thread-safety-force, no, [force thread-safety despite thread test failure]) -if test "$enable_thread_safety" = yes -o \ - "$enable_thread_safety_force" = yes; then - enable_thread_safety="yes" # for 'force' - AC_DEFINE([ENABLE_THREAD_SAFETY], 1, - [Define to 1 to build client libraries as thread-safe code. (--enable-thread-safety)]) -fi +PGAC_ARG_BOOL(enable, thread-safety, yes, [disable thread-safety in client libraries]) AC_MSG_RESULT([$enable_thread_safety]) AC_SUBST(enable_thread_safety) @@ -1399,7 +1391,7 @@ PTHREAD_CFLAGS="$PTHREAD_CFLAGS -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEM if test "$PTHREAD_CC" != "$CC"; then AC_MSG_ERROR([ PostgreSQL does not support platforms that require a special compiler -for thread safety.]) +for thread safety; use --disable-thread-safety to disable thread safety.]) fi # Check for *_r functions @@ -1409,7 +1401,8 @@ CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$LIBS $PTHREAD_LIBS" if test "$PORTNAME" != "win32"; then -AC_CHECK_HEADER(pthread.h, [], [AC_MSG_ERROR([pthread.h not found, required for --enable-thread-safety])]) +AC_CHECK_HEADER(pthread.h, [], [AC_MSG_ERROR([ +pthread.h not found; use --disable-thread-safety to disable thread safety])]) fi AC_CHECK_FUNCS([strerror_r getpwuid_r gethostbyname_r]) @@ -1655,7 +1648,7 @@ PGAC_FUNC_POSIX_SIGNALS if test "$pgac_cv_func_posix_signals" != yes -a "$enable_thread_safety" = yes; then AC_MSG_ERROR([ Thread-safety requires POSIX signals, which are not supported by this -operating system.]) +operating system; use --disable-thread-safety to disable thread safety.]) fi fi @@ -1744,18 +1737,7 @@ AC_CHECK_PROGS(OSX, [osx sgml2xml sx]) # We have to run the thread test near the end so we have all our symbols # defined. Cross compiling throws a warning. # -if test "$enable_thread_safety_force" = yes; then -if test "$PORTNAME" != "win32" -then - AC_MSG_WARN([ -*** Skipping thread test program. --enable-thread-safety-force was used. -*** Run the program in src/test/thread on the your machine and add proper -*** locking function calls to your applications to guarantee thread safety. -]) -else -AC_MSG_WARN([*** skipping thread test on Win32]) -fi -elif test "$enable_thread_safety" = yes; then +if test "$enable_thread_safety" = yes; then if test "$PORTNAME" != "win32" then AC_MSG_CHECKING([thread safety of required library functions]) @@ -1768,13 +1750,9 @@ AC_TRY_RUN([#include "$srcdir/src/test/thread/thread_test.c"], [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no) AC_MSG_ERROR([thread test program failed -This platform is not thread-safe. Check the file 'config.log' for the -exact reason. - -You can use the configure option --enable-thread-safety-force to force -threads to be enabled. But you must then run the program in -src/test/thread and add locking function calls to your applications to -guarantee thread safety.])], +This platform is not thread-safe. Check the file 'config.log' or compile +and run src/test/thread/thread_test for the exact reason. +Use --disable-thread-safety to disable thread safety.])], [AC_MSG_RESULT(maybe) AC_MSG_WARN([ *** Skipping thread test program because of cross-compile build. diff --git a/doc/src/sgml/ecpg.sgml b/doc/src/sgml/ecpg.sgml index 1b79c29f6e..ebf8e73a84 100644 --- a/doc/src/sgml/ecpg.sgml +++ b/doc/src/sgml/ecpg.sgml @@ -1,4 +1,4 @@ - + <application>ECPG</application> - Embedded <acronym>SQL</acronym> in C @@ -4709,10 +4709,9 @@ ECPG = ecpg - The ecpg library is thread-safe if it is built - using the diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml index 7dee9e6640..a0782dc177 100644 --- a/doc/src/sgml/installation.sgml +++ b/doc/src/sgml/installation.sgml @@ -1,4 +1,4 @@ - + <![%standalone-include[<productname>PostgreSQL</>]]> @@ -1164,14 +1164,13 @@ su - postgres </varlistentry> <varlistentry> - <term><option>--enable-thread-safety</option></term> + <term><option>--disable-thread-safety</option></term> <listitem> <para> - Make the client libraries thread-safe. This allows + Disable the thread-safety of client libraries. This prevents concurrent threads in <application>libpq</application> and - <application>ECPG</application> programs to safely control - their private connection handles. This option requires adequate - threading support in your operating system. + <application>ECPG</application> programs from safely controlling + their private connection handles. </para> </listitem> </varlistentry> @@ -2835,12 +2834,10 @@ MANPATH=/usr/lib/scohelp/%L/man:/usr/dt/man:/usr/man:/usr/share/man:scohelp:/usr </sect3> <sect3> - <title><option>--enable-thread-safety</option> and UnixWare + Threading on UnixWare - If you use the configure - option , - you must use + For threading, youmust use on all libpq-using programs. libpq uses pthread_* calls, which are only available with the diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml index 95c903378c..5dce33fbd2 100644 --- a/doc/src/sgml/libpq.sgml +++ b/doc/src/sgml/libpq.sgml @@ -1,4 +1,4 @@ - + <application>libpq</application> - C Library @@ -6579,11 +6579,8 @@ myEventProc(PGEventId evtId, void *evtInfo, void *passThrough) - libpq is reentrant and thread-safe if the - configure command-line option - --enable-thread-safety was used when the - PostgreSQL distribution was built. In - addition, you might need to use additional compiler command-line + libpq is reentrant and thread-safe by default. + You might need to use special compiler command-line options when you compile your application code. Refer to your system's documentation for information about how to build thread-enabled applications, or look in diff --git a/src/test/thread/README b/src/test/thread/README index 98f1f54f09..9f85ae7398 100644 --- a/src/test/thread/README +++ b/src/test/thread/README @@ -1,17 +1,18 @@ -$PostgreSQL: pgsql/src/test/thread/README,v 1.2 2008/03/21 13:23:29 momjian Exp $ +$PostgreSQL: pgsql/src/test/thread/README,v 1.3 2009/12/02 14:07:26 momjian Exp $ Threading ========= -This program should be run by developers wishing to enable threading on -new platforms. +This program is run by configure to determine if threading is +properly supported on the platform. -Run thread_test program to determine if your native libc functions are -thread-safe, or if we should use *_r functions or thread locking. +You can run the program manually to see details, which shows if your +native libc functions are thread-safe, or if we use *_r functions or +thread locking. -To use this program, you must: +To use this program manually, you must: - o run "configure --enable-thread-safety" + o run "configure" o compile the main source tree o compile and run this program