]> granicus.if.org Git - postgresql/commitdiff
Fix fsync code to test whether F_FULLFSYNC is available, instead of
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 17 Jan 2006 23:52:50 +0000 (23:52 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 17 Jan 2006 23:52:50 +0000 (23:52 +0000)
assuming it always is on Darwin.  Per report from Neil Brandt.

configure
configure.in
src/backend/storage/file/fd.c
src/include/pg_config.h.in
src/include/port/darwin.h

index 52a1605cffed7626508a00dee17210bbae491832..b2b50209e16f0caf5a5457573cb6eccdb7f2b45a 100755 (executable)
--- a/configure
+++ b/configure
 
 fi
 
+# This is probably only present on Darwin, but may as well check always
+echo "$as_me:$LINENO: checking whether F_FULLFSYNC is declared" >&5
+echo $ECHO_N "checking whether F_FULLFSYNC is declared... $ECHO_C" >&6
+if test "${ac_cv_have_decl_F_FULLFSYNC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <fcntl.h>
+
+int
+main ()
+{
+#ifndef F_FULLFSYNC
+  char *p = (char *) F_FULLFSYNC;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        { ac_try='test -z "$ac_c_werror_flag"
+                        || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_have_decl_F_FULLFSYNC=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_have_decl_F_FULLFSYNC=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_have_decl_F_FULLFSYNC" >&5
+echo "${ECHO_T}$ac_cv_have_decl_F_FULLFSYNC" >&6
+if test $ac_cv_have_decl_F_FULLFSYNC = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_F_FULLFSYNC 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_F_FULLFSYNC 0
+_ACEOF
+
+
+fi
+
+
+
 ##
 ## Functions, global variables
 ##
index 572f9d2265d90e13722141558a2c6dc13ebd25e5..32c4d14bf4584314372b9992cc61e93ed7515b01 100644 (file)
@@ -1,5 +1,5 @@
 dnl Process this file with autoconf to produce a configure script.
-dnl $PostgreSQL: pgsql/configure.in,v 1.431.2.6 2006/01/12 19:23:41 tgl Exp $
+dnl $PostgreSQL: pgsql/configure.in,v 1.431.2.7 2006/01/17 23:52:49 tgl Exp $
 dnl
 dnl Developers, please strive to achieve this order:
 dnl
@@ -810,6 +810,9 @@ if test "$with_krb5" = yes; then
                    [#include <krb5.h>])
 fi
 
+# This is probably only present on Darwin, but may as well check always
+AC_CHECK_DECLS(F_FULLFSYNC, [], [], [#include <fcntl.h>])
+
 ##
 ## Functions, global variables
 ##
index 195563ebe3c49c994b0f134226e860692565d515..e4ebb93fc922dc2f6e1ce48818ecfea37cb603df 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/storage/file/fd.c,v 1.121.2.2 2005/12/01 20:24:31 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/storage/file/fd.c,v 1.121.2.3 2006/01/17 23:52:50 tgl Exp $
  *
  * NOTES:
  *
@@ -265,13 +265,15 @@ int
 pg_fsync_writethrough(int fd)
 {
        if (enableFsync)
+       {
 #ifdef WIN32
                return _commit(fd);
-#elif defined(__darwin__)
-       return (fcntl(fd, F_FULLFSYNC, 0) == -1) ? -1 : 0;
+#elif defined(F_FULLFSYNC)
+               return (fcntl(fd, F_FULLFSYNC, 0) == -1) ? -1 : 0;
 #else
                return -1;
 #endif
+       }
        else
                return 0;
 }
index b1daceeecf9babfbb280657c93436fb094265a94..d344ecd2906c9bc867e4b81f2f1645a1fc6c3a67 100644 (file)
    don't. */
 #undef HAVE_DECL_FDATASYNC
 
+/* Define to 1 if you have the declaration of `F_FULLFSYNC', and to 0 if you
+   don't. */
+#undef HAVE_DECL_F_FULLFSYNC
+
 /* Define to 1 if you have the declaration of `snprintf', and to 0 if you
    don't. */
 #undef HAVE_DECL_SNPRINTF
index 2b7600bebeb85b3828171d8bc7cf2e95774969f3..af4ce9b3856374578aab1fe72b4ed19d1717cb77 100644 (file)
@@ -1,3 +1,5 @@
 #define __darwin__     1
 
+#if HAVE_DECL_F_FULLFSYNC              /* not present before OS X 10.3 */
 #define HAVE_FSYNC_WRITETHROUGH
+#endif