Wrap O_DSYNC in MDB_DSYNC.

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.
vmware
Hallvard B Furuseth 13 years ago committed by Howard Chu
parent cb7c955220
commit 5b3b522313
  1. 10
      libraries/libmdb/mdb.c

@ -55,6 +55,14 @@ typedef ULONG pgno_t;
#include "midl.h" #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 #ifndef DEBUG
#define DEBUG 1 #define DEBUG 1
#endif #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) { if ((rc = mdb_env_open2(env, flags)) == MDB_SUCCESS) {
/* synchronous fd for meta writes */ /* synchronous fd for meta writes */
if (!(flags & (MDB_RDONLY|MDB_NOSYNC))) if (!(flags & (MDB_RDONLY|MDB_NOSYNC)))
oflags |= O_DSYNC; oflags |= MDB_DSYNC;
if ((env->me_mfd = open(dpath, oflags, mode)) == -1) { if ((env->me_mfd = open(dpath, oflags, mode)) == -1) {
rc = errno; rc = errno;
goto leave; goto leave;

Loading…
Cancel
Save