]> git.sur5r.net Git - openldap/commitdiff
Add MDB_NORDLOCK to omit all reader table usage
authorHoward Chu <hyc@symas.com>
Tue, 1 Oct 2013 20:16:38 +0000 (13:16 -0700)
committerHoward Chu <hyc@symas.com>
Tue, 1 Oct 2013 20:16:38 +0000 (13:16 -0700)
Calling app wants to manage its own locking.

libraries/liblmdb/lmdb.h
libraries/liblmdb/mdb.c

index f637229283b7b4c11db76c63ed1bd1a04ab70963..848ba635ddcbf3d326af17bdb771fe8b5118a1c3 100644 (file)
@@ -269,6 +269,8 @@ typedef void (MDB_rel_func)(MDB_val *item, void *oldptr, void *newptr, void *rel
 #define MDB_MAPASYNC           0x100000
        /** tie reader locktable slots to #MDB_txn objects instead of to threads */
 #define MDB_NOTLS              0x200000
+       /** don't use reader locktable at all, caller must manage read/write concurrency */
+#define MDB_NORDLOCK           0x400000
 /** @} */
 
 /**    @defgroup       mdb_dbi_open    Database Flags
index c4db089b32a35fe536a49caa7d2638ed0707877e..e82335d716ce48c5aac21acd41bc94108e9b040d 100644 (file)
@@ -3983,7 +3983,7 @@ mdb_env_open(MDB_env *env, const char *path, unsigned int flags, mdb_mode_t mode
                goto leave;
        }
 
-       if (F_ISSET(flags, MDB_RDONLY)) {
+       if ((flags & (MDB_RDONLY|MDB_NORDLOCK)) == MDB_RDONLY) {
                rc = mdb_env_setup_locks(env, lpath, mode, &excl);
                if (rc)
                        goto leave;