OpenLDAP ITS#7363 cleanups [revised patch] defined(BSD) breaks in strict ISO C mode. Is there a symbol like __BSD__ or __BSD to use instead? Namespace-wise, "MDB_USE_POSIX_SEM" would be better. MDB_FDATASYNC should not depend on USE_POSIX_SEM. Patch follows, except: Replace defined(BSD) in 1st patch with defined(__BSD__) or whatever. Also, maybe we can drop __APPLE__ - it may #define __BSD__ too. ANDROID should be something like __ANDROID__. I can't test either. ######################################################################## Separate MDB_FDATASYNC from USE_POSIX_SEM. diff --git a/libraries/libmdb/mdb.c b/libraries/libmdb/mdb.c index 6be2103..16c44f3 100644 --- a/libraries/libmdb/mdb.c +++ b/libraries/libmdb/mdb.c @@ -159,11 +159,8 @@ #define UNLOCK_MUTEX_R(env) sem_post((env)->me_rmutex) #define LOCK_MUTEX_W(env) sem_wait((env)->me_wmutex) #define UNLOCK_MUTEX_W(env) sem_post((env)->me_wmutex) -#define MDB_FDATASYNC(fd) fsync(fd) #else -#ifdef ANDROID -#define MDB_FDATASYNC(fd) fsync(fd) -#endif + /** Lock the reader mutex. */ #define LOCK_MUTEX_R(env) pthread_mutex_lock(&(env)->me_txns->mti_mutex) @@ -230,7 +227,10 @@ /** Function for flushing the data of a file. Define this to fsync * if fdatasync() is not supported. */ -#ifndef MDB_FDATASYNC +#ifdef MDB_FDATASYNC +#elif defined(ANDROID) || defined(BSD) || defined(__APPLE__) +# define MDB_FDATASYNC fsync +#else # define MDB_FDATASYNC fdatasync #endif ######################################################################## USE_POSIX_SEM -> MDB_USE_POSIX_SEM. Also join #ifdef WIN32/#endif/#ifdef MDB_USE_POSIX_SEM/#endif into a more logical-looking #if/#elif/#endif. diff --git a/libraries/libmdb/mdb.c b/libraries/libmdb/mdb.c index e67df5a..b18ee68 100644 --- a/libraries/libmdb/mdb.c +++ b/libraries/libmdb/mdb.c @@ -65,11 +65,11 @@ #include /* Use named semaphores if process-shared mutexes are not supported. */ -#if !defined(PTHREAD_PROCESS_SHARED) && !defined(USE_POSIX_SEM) -#define USE_POSIX_SEM 1 +#if !defined(PTHREAD_PROCESS_SHARED) && !defined(MDB_USE_POSIX_SEM) +#define MDB_USE_POSIX_SEM 1 #endif -#ifdef USE_POSIX_SEM +#ifdef MDB_USE_POSIX_SEM #include #endif #endif @@ -156,7 +156,7 @@ #define close(fd) CloseHandle(fd) #define munmap(ptr,len) UnmapViewOfFile(ptr) #else -#ifdef USE_POSIX_SEM +#ifdef MDB_USE_POSIX_SEM #define LOCK_MUTEX_R(env) sem_wait((env)->me_rmutex) #define UNLOCK_MUTEX_R(env) sem_post((env)->me_rmutex) #define LOCK_MUTEX_W(env) sem_wait((env)->me_wmutex) @@ -178,7 +178,7 @@ /** Unlock the writer mutex. */ #define UNLOCK_MUTEX_W(env) pthread_mutex_unlock(&(env)->me_txns->mti_wmutex) -#endif /* USE_POSIX_SEM */ +#endif /* MDB_USE_POSIX_SEM */ /** Get the error code for the last failed system function. */ @@ -203,7 +203,7 @@ #define GET_PAGESIZE(x) ((x) = sysconf(_SC_PAGE_SIZE)) #endif -#if defined(_WIN32) || defined(USE_POSIX_SEM) +#if defined(_WIN32) || defined(MDB_USE_POSIX_SEM) #define MNAME_LEN 32 #else #define MNAME_LEN (sizeof(pthread_mutex_t)) @@ -470,7 +470,7 @@ typedef struct MDB_txbody { uint32_t mtb_magic; /** Version number of this lock file. Must be set to #MDB_VERSION. */ uint32_t mtb_version; -#if defined(_WIN32) || defined(USE_POSIX_SEM) +#if defined(_WIN32) || defined(MDB_USE_POSIX_SEM) char mtb_rmname[MNAME_LEN]; #else /** Mutex protecting access to this table. @@ -503,7 +503,7 @@ typedef struct MDB_txninfo { char pad[(sizeof(MDB_txbody)+CACHELINE-1) & ~(CACHELINE-1)]; } mt1; union { -#if defined(_WIN32) || defined(USE_POSIX_SEM) +#if defined(_WIN32) || defined(MDB_USE_POSIX_SEM) char mt2_wmname[MNAME_LEN]; #define mti_wmname mt2.mt2_wmname #else @@ -919,9 +919,8 @@ struct MDB_env { #ifdef _WIN32 HANDLE me_rmutex; /* Windows mutexes don't reside in shared mem */ HANDLE me_wmutex; -#endif -#ifdef USE_POSIX_SEM - sem_t *me_rmutex; /* Apple doesn't support shared mutexes */ +#elif defined(MDB_USE_POSIX_SEM) + sem_t *me_rmutex; sem_t *me_wmutex; #endif }; @@ -2687,7 +2686,7 @@ mdb_env_excl_lock(MDB_env *env, int *excl) return 0; } -#if defined(_WIN32) || defined(USE_POSIX_SEM) +#if defined(_WIN32) || defined(MDB_USE_POSIX_SEM) /* * hash_64 - 64 bit Fowler/Noll/Vo-0 FNV-1a hash code * @@ -2897,8 +2896,7 @@ mdb_env_setup_locks(MDB_env *env, char *lpath, int mode, int *excl) rc = ErrCode(); goto fail; } -#else /* _WIN32 */ -#ifdef USE_POSIX_SEM +#elif defined(MDB_USE_POSIX_SEM) struct stat stbuf; struct { dev_t dev; @@ -2935,7 +2933,7 @@ mdb_env_setup_locks(MDB_env *env, char *lpath, int mode, int *excl) rc = ErrCode(); goto fail; } -#else /* USE_POSIX_SEM */ +#else /* MDB_USE_POSIX_SEM */ pthread_mutexattr_t mattr; pthread_mutexattr_init(&mattr); @@ -2945,7 +2943,6 @@ mdb_env_setup_locks(MDB_env *env, char *lpath, int mode, int *excl) } pthread_mutex_init(&env->me_txns->mti_mutex, &mattr); pthread_mutex_init(&env->me_txns->mti_wmutex, &mattr); -#endif /* USE_POSIX_SEM */ #endif /* _WIN32 */ env->me_txns->mti_version = MDB_VERSION; env->me_txns->mti_magic = MDB_MAGIC; @@ -2979,8 +2976,7 @@ mdb_env_setup_locks(MDB_env *env, char *lpath, int mode, int *excl) rc = ErrCode(); goto fail; } -#endif -#ifdef USE_POSIX_SEM +#elif defined(MDB_USE_POSIX_SEM) env->me_rmutex = sem_open(env->me_txns->mti_rmname, 0); if (env->me_rmutex == SEM_FAILED) { rc = ErrCode(); @@ -3166,8 +3162,7 @@ mdb_env_close(MDB_env *env) /* Windows automatically destroys the mutexes when * the last handle closes. */ -#else -#ifdef USE_POSIX_SEM +#elif defined(MDB_USE_POSIX_SEM) sem_close(env->me_rmutex); sem_close(env->me_wmutex); { int excl = 0; @@ -3179,7 +3174,6 @@ mdb_env_close(MDB_env *env) } } #endif -#endif munmap((void *)env->me_txns, (env->me_maxreaders-1)*sizeof(MDB_reader)+sizeof(MDB_txninfo)); } close(env->me_lfd);