]> git.sur5r.net Git - openldap/commitdiff
Wrap O_DSYNC in MDB_DSYNC.
authorHallvard B Furuseth <h.b.furuseth@usit.uio.no>
Fri, 19 Aug 2011 18:35:25 +0000 (20:35 +0200)
committerHoward Chu <hyc@symas.com>
Thu, 1 Sep 2011 23:31:10 +0000 (16:31 -0700)
If O_DSYNC is not defined, that may be due to poor compiler options.
We could fall back to the less efficient O_SYNC, but it seems better
to let the user learn of the problem and give better compiler options.

libraries/libmdb/mdb.c

index 3de7e1d71bb06fb365697880fb76825a08f6761b..84c448226772592bc2dfd487ddba684287e7a479 100644 (file)
@@ -55,6 +55,14 @@ typedef ULONG                pgno_t;
 
 #include "midl.h"
 
+/* Note: If O_DSYNC is undefined but exists in /usr/include,
+ * preferably set some compiler flag to get the definition.
+ * Otherwise compile with the less efficient -DMDB_DSYNC=O_SYNC.
+ */
+#ifndef MDB_DSYNC
+# define MDB_DSYNC     O_DSYNC
+#endif
+
 #ifndef DEBUG
 #define DEBUG 1
 #endif
@@ -1407,7 +1415,7 @@ mdb_env_open(MDB_env *env, const char *path, unsigned int flags, mode_t mode)
        if ((rc = mdb_env_open2(env, flags)) == MDB_SUCCESS) {
                /* synchronous fd for meta writes */
                if (!(flags & (MDB_RDONLY|MDB_NOSYNC)))
-                       oflags |= O_DSYNC;
+                       oflags |= MDB_DSYNC;
                if ((env->me_mfd = open(dpath, oflags, mode)) == -1) {
                        rc = errno;
                        goto leave;