diff --git a/libraries/liblmdb/Makefile b/libraries/liblmdb/Makefile index 62b52a9ad1c21c3e9085dbbb019a8274d6b2c3f0..afd0cd8cc82a2f49eac888870136296fe10446ba 100644 --- a/libraries/liblmdb/Makefile +++ b/libraries/liblmdb/Makefile @@ -13,6 +13,7 @@ # - MDB_FDATASYNC # - MDB_FDATASYNC_WORKS # - MDB_USE_PWRITEV +# - MDB_NO_ROBUST # # There may be other macros in mdb.c of interest. You should # read mdb.c before changing any of them. diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c index 7a21b50ef55273944ccbd8cf8d7dabd655b816a2..ac3ec2b6402d0084742a72614eaf70a3355ef010 100644 --- a/libraries/liblmdb/mdb.c +++ b/libraries/liblmdb/mdb.c @@ -238,7 +238,25 @@ typedef SSIZE_T ssize_t; #define MDB_OWNERDEAD EOWNERDEAD /**< #LOCK_MUTEX0() result if dead owner */ #endif -#ifdef MDB_OWNERDEAD +/* Android currently lacks Robust Mutex support */ +#if defined(ANDROID) && defined(MDB_USE_POSIX_MUTEX) +#define MDB_NO_ROBUST 1 +#endif + +/** Some platforms define the EOWNERDEAD error code + * even though they don't support Robust Mutexes. + * Compile with -DMDB_NO_ROBUST, or use some other + * mechanism like -DMDB_USE_SYSV_SEM instead of + * -DMDB_USE_POSIX_MUTEX. (SysV semaphores are + * also Robust, but some systems don't support them + * either.) + */ + +#ifndef MDB_NO_ROBUST +#define MDB_NO_ROBUST 0 +#endif + +#if defined(MDB_OWNERDEAD) && !(MDB_NO_ROBUST) #define MDB_ROBUST_SUPPORTED 1 #endif