diff options
author | Xin LI <delphij@FreeBSD.org> | 2020-06-16 21:54:58 +0000 |
---|---|---|
committer | Xin LI <delphij@FreeBSD.org> | 2020-06-16 21:54:58 +0000 |
commit | 074f0333fe4025d5b88ffb57e0313c56f200cee5 (patch) | |
tree | 6f6168b02d2127db1102c455c703d4e789469772 | |
parent | ce4c989016fe045b2e1e81c443bec1fcf487c69a (diff) |
Notes
-rw-r--r-- | databases/lmdb/Makefile | 2 | ||||
-rw-r--r-- | databases/lmdb/files/patch-mdb.c | 33 |
2 files changed, 31 insertions, 4 deletions
diff --git a/databases/lmdb/Makefile b/databases/lmdb/Makefile index 9d9ab27c8371..e0d22dfa129c 100644 --- a/databases/lmdb/Makefile +++ b/databases/lmdb/Makefile @@ -3,7 +3,7 @@ PORTNAME= lmdb PORTVERSION= 0.9.24 -PORTREVISION= 1 +PORTREVISION= 2 DISTVERSIONPREFIX= ${PORTNAME:tu}_ PORTEPOCH= 1 CATEGORIES= databases diff --git a/databases/lmdb/files/patch-mdb.c b/databases/lmdb/files/patch-mdb.c index bd13791fc88b..55a178cf7e09 100644 --- a/databases/lmdb/files/patch-mdb.c +++ b/databases/lmdb/files/patch-mdb.c @@ -5,10 +5,37 @@ #endif -#if defined(__APPLE__) || defined (BSD) || defined(__FreeBSD_kernel__) -+#if defined(__FreeBSD__) -+# define MDB_USE_POSIX_MUTEX 1 -+# define MDB_USE_ROBUST 1 ++#if defined(__FreeBSD__) && defined(__FreeBSD_version) && __FreeBSD_version >= 1100110 ++# define MDB_USE_POSIX_MUTEX 1 ++# define MDB_USE_ROBUST 1 +#elif defined(__APPLE__) || defined (BSD) || defined(__FreeBSD_kernel__) # define MDB_USE_POSIX_SEM 1 # define MDB_FDATASYNC fsync #elif defined(ANDROID) +@@ -1375,7 +1378,7 @@ static int mdb_page_split(MDB_cursor *mc, MDB_val *new + static int mdb_env_read_header(MDB_env *env, MDB_meta *meta); + static MDB_meta *mdb_env_pick_meta(const MDB_env *env); + static int mdb_env_write_meta(MDB_txn *txn); +-#ifdef MDB_USE_POSIX_MUTEX /* Drop unused excl arg */ ++#if defined(MDB_USE_POSIX_MUTEX) && !defined(MDB_ROBUST_SUPPORTED) /* Drop unused excl arg */ + # define mdb_env_close0(env, excl) mdb_env_close1(env) + #endif + static void mdb_env_close0(MDB_env *env, int excl); +@@ -5127,6 +5130,17 @@ mdb_env_close0(MDB_env *env, int excl) + sem_unlink(env->me_txns->mti_rmname); + sem_unlink(env->me_txns->mti_wmname); + } ++ } ++#elif defined(MDB_ROBUST_SUPPORTED) ++ /* If we have the filelock: If we are the ++ * only remaining user, clean up robust ++ * mutexes. ++ */ ++ if (excl == 0) ++ mdb_env_excl_lock(env, &excl); ++ if (excl > 0) { ++ pthread_mutex_destroy(env->me_txns->mti_rmutex); ++ pthread_mutex_destroy(env->me_txns->mti_wmutex); + } + #endif + munmap((void *)env->me_txns, (env->me_maxreaders-1)*sizeof(MDB_reader)+sizeof(MDB_txninfo)); |