aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXin LI <delphij@FreeBSD.org>2020-06-16 21:54:58 +0000
committerXin LI <delphij@FreeBSD.org>2020-06-16 21:54:58 +0000
commit074f0333fe4025d5b88ffb57e0313c56f200cee5 (patch)
tree6f6168b02d2127db1102c455c703d4e789469772
parentce4c989016fe045b2e1e81c443bec1fcf487c69a (diff)
Notes
-rw-r--r--databases/lmdb/Makefile2
-rw-r--r--databases/lmdb/files/patch-mdb.c33
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));