.TH "mdb.c" 3 "Wed May 18 2016" "LMDB" \" -*- nroff -*- .ad l .nh .SH NAME mdb.c \- .PP Lightning memory-mapped database library\&. .SH SYNOPSIS .br .PP \fC#include \fP .br \fC#include \fP .br \fC#include \fP .br \fC#include \fP .br \fC#include \fP .br \fC#include \fP .br \fC#include \fP .br \fC#include \fP .br \fC#include \fP .br \fC#include \fP .br \fC#include \fP .br \fC#include \fP .br \fC#include \fP .br \fC#include \fP .br \fC#include \fP .br \fC#include \fP .br \fC#include \fP .br \fC#include \fP .br \fC#include 'lmdb\&.h'\fP .br \fC#include 'midl\&.h'\fP .br .SS "Data Structures" .in +1c .ti -1c .RI "struct \fBMDB_rxbody\fP" .br .ti -1c .RI "struct \fBMDB_reader\fP" .br .ti -1c .RI "struct \fBMDB_txbody\fP" .br .ti -1c .RI "struct \fBMDB_txninfo\fP" .br .ti -1c .RI "struct \fBMDB_page\fP" .br .ti -1c .RI "struct \fBMDB_node\fP" .br .ti -1c .RI "struct \fBMDB_db\fP" .br .ti -1c .RI "struct \fBMDB_meta\fP" .br .ti -1c .RI "union \fBMDB_metabuf\fP" .br .ti -1c .RI "struct \fBMDB_dbx\fP" .br .ti -1c .RI "struct \fBMDB_txn\fP" .br .RI "\fIOpaque structure for a transaction handle\&. \fP" .ti -1c .RI "struct \fBMDB_cursor\fP" .br .RI "\fIOpaque structure for navigating through a database\&. \fP" .ti -1c .RI "struct \fBMDB_xcursor\fP" .br .ti -1c .RI "struct \fBMDB_pgstate\fP" .br .ti -1c .RI "struct \fBMDB_env\fP" .br .RI "\fIOpaque structure for a database environment\&. \fP" .ti -1c .RI "struct \fBMDB_ntxn\fP" .br .ti -1c .RI "struct \fBmdb_copy\fP" .br .in -1c .SS "Macros" .in +1c .ti -1c .RI "#define \fB_GNU_SOURCE\fP 1" .br .ti -1c .RI "#define \fBMDB_PID_T\fP pid_t" .br .ti -1c .RI "#define \fBMDB_THR_T\fP pthread_t" .br .ti -1c .RI "#define \fBCACHEFLUSH\fP(addr, bytes, cache)" .br .ti -1c .RI "#define \fBMDB_USE_POSIX_MUTEX\fP 1" .br .ti -1c .RI "#define \fBVGMEMP_CREATE\fP(h, r, z)" .br .ti -1c .RI "#define \fBVGMEMP_ALLOC\fP(h, a, s)" .br .ti -1c .RI "#define \fBVGMEMP_FREE\fP(h, a)" .br .ti -1c .RI "#define \fBVGMEMP_DESTROY\fP(h)" .br .ti -1c .RI "#define \fBVGMEMP_DEFINED\fP(a, s)" .br .ti -1c .RI "#define \fBBYTE_ORDER\fP __BYTE_ORDER" .br .ti -1c .RI "#define \fBLITTLE_ENDIAN\fP __LITTLE_ENDIAN" .br .ti -1c .RI "#define \fBBIG_ENDIAN\fP __BIG_ENDIAN" .br .ti -1c .RI "#define \fBESECT\fP __attribute__ ((section('text_env')))" .br .ti -1c .RI "#define \fBCALL_CONV\fP" .br .ti -1c .RI "#define \fBMDB_DEVEL\fP 0" .br .ti -1c .RI "#define \fBmdb_func_\fP ''" .br .ti -1c .RI "#define \fBMDB_NO_ROOT\fP (\fBMDB_LAST_ERRCODE\fP + 10)" .br .ti -1c .RI "#define \fBMDB_USE_ROBUST\fP 1" .br .ti -1c .RI "#define \fBTHREAD_RET\fP void *" .br .ti -1c .RI "#define \fBTHREAD_CREATE\fP(thr, start, arg) pthread_create(&thr,NULL,start,arg)" .br .ti -1c .RI "#define \fBTHREAD_FINISH\fP(thr) pthread_join(thr,NULL)" .br .ti -1c .RI "#define \fBZ\fP 'z'" .br .ti -1c .RI "#define \fBMDB_PIDLOCK\fP 1" .br .ti -1c .RI "#define \fBLOCK_MUTEX0\fP(mutex) pthread_mutex_lock(mutex)" .br .ti -1c .RI "#define \fBUNLOCK_MUTEX\fP(mutex) pthread_mutex_unlock(mutex)" .br .ti -1c .RI "#define \fBmdb_mutex_consistent\fP(mutex) pthread_mutex_consistent(mutex)" .br .ti -1c .RI "#define \fBErrCode\fP() errno" .br .ti -1c .RI "#define \fBHANDLE\fP int" .br .ti -1c .RI "#define \fBINVALID_HANDLE_VALUE\fP (-1)" .br .ti -1c .RI "#define \fBGET_PAGESIZE\fP(x) ((x) = sysconf(_SC_PAGE_SIZE))" .br .ti -1c .RI "#define \fBMNAME_LEN\fP (sizeof(pthread_mutex_t))" .br .ti -1c .RI "#define \fBLOCK_MUTEX\fP(rc, env, mutex) ((rc) = \fBLOCK_MUTEX0\fP(mutex))" .br .ti -1c .RI "#define \fBmdb_mutex_failed\fP(env, mutex, rc) (rc)" .br .ti -1c .RI "#define \fBMDB_DSYNC\fP O_SYNC" .br .ti -1c .RI "#define \fBMDB_FDATASYNC\fP fdatasync" .br .ti -1c .RI "#define \fBMDB_MSYNC\fP(addr, len, flags) msync(addr,len,flags)" .br .ti -1c .RI "#define \fBMS_SYNC\fP 1" .br .ti -1c .RI "#define \fBMS_ASYNC\fP 0" .br .ti -1c .RI "#define \fBMDB_DEBUG\fP 0" .br .ti -1c .RI "#define \fBDPRINTF\fP(args) ((void) 0)" .br .ti -1c .RI "#define \fBDPUTS\fP(arg) DPRINTF(('%s', arg))" .br .ti -1c .RI "#define \fBDDBI\fP(mc) (((mc)->mc_flags & \fBC_SUB\fP) ? -(int)(mc)->mc_dbi : (int)(mc)->mc_dbi)" .br .ti -1c .RI "#define \fBMAX_PAGESIZE\fP (\fBPAGEBASE\fP ? 0x10000 : 0x8000)" .br .RI "\fIThe maximum size of a database page\&. \fP" .ti -1c .RI "#define \fBMDB_MINKEYS\fP 2" .br .ti -1c .RI "#define \fBMDB_MAGIC\fP 0xBEEFC0DE" .br .ti -1c .RI "#define \fBMDB_DATA_VERSION\fP ((\fBMDB_DEVEL\fP) ? 999 : 1)" .br .ti -1c .RI "#define \fBMDB_LOCK_VERSION\fP 1" .br .ti -1c .RI "#define \fBMDB_MAXKEYSIZE\fP ((\fBMDB_DEVEL\fP) ? 0 : 511)" .br .RI "\fIThe max size of a key we can write, or 0 for computed max\&. \fP" .ti -1c .RI "#define \fBENV_MAXKEY\fP(env) (\fBMDB_MAXKEYSIZE\fP)" .br .ti -1c .RI "#define \fBMAXDATASIZE\fP 0xffffffffUL" .br .RI "\fIThe maximum size of a data item\&. \fP" .ti -1c .RI "#define \fBDKBUF\fP" .br .ti -1c .RI "#define \fBDKEY\fP(x) 0" .br .ti -1c .RI "#define \fBP_INVALID\fP (~(\fBpgno_t\fP)0)" .br .ti -1c .RI "#define \fBF_ISSET\fP(w, f) (((w) & (f)) == (f))" .br .ti -1c .RI "#define \fBEVEN\fP(n) (((n) + 1U) & -2) /* sign-extending -2 to match n+1U */" .br .ti -1c .RI "#define \fBDEFAULT_MAPSIZE\fP 1048576" .br .ti -1c .RI "#define \fBDEFAULT_READERS\fP 126" .br .ti -1c .RI "#define \fBCACHELINE\fP 64" .br .ti -1c .RI "#define \fBmr_txnid\fP mru\&.mrx\&.mrb_txnid" .br .ti -1c .RI "#define \fBmr_pid\fP mru\&.mrx\&.mrb_pid" .br .ti -1c .RI "#define \fBmr_tid\fP mru\&.mrx\&.mrb_tid" .br .ti -1c .RI "#define \fBmti_magic\fP mt1\&.mtb\&.mtb_magic" .br .ti -1c .RI "#define \fBmti_format\fP mt1\&.mtb\&.mtb_format" .br .ti -1c .RI "#define \fBmti_rmutex\fP mt1\&.mtb\&.mtb_rmutex" .br .ti -1c .RI "#define \fBmti_rmname\fP mt1\&.mtb\&.mtb_rmname" .br .ti -1c .RI "#define \fBmti_txnid\fP mt1\&.mtb\&.mtb_txnid" .br .ti -1c .RI "#define \fBmti_numreaders\fP mt1\&.mtb\&.mtb_numreaders" .br .ti -1c .RI "#define \fBmti_wmutex\fP mt2\&.mt2_wmutex" .br .ti -1c .RI "#define \fBMDB_LOCK_FORMAT\fP" .br .ti -1c .RI "#define \fBmp_pgno\fP mp_p\&.p_pgno" .br .ti -1c .RI "#define \fBmp_next\fP mp_p\&.p_next" .br .ti -1c .RI "#define \fBP_BRANCH\fP 0x01" .br .ti -1c .RI "#define \fBP_LEAF\fP 0x02" .br .ti -1c .RI "#define \fBP_OVERFLOW\fP 0x04" .br .ti -1c .RI "#define \fBP_META\fP 0x08" .br .ti -1c .RI "#define \fBP_DIRTY\fP 0x10" .br .ti -1c .RI "#define \fBP_LEAF2\fP 0x20" .br .ti -1c .RI "#define \fBP_SUBP\fP 0x40" .br .ti -1c .RI "#define \fBP_LOOSE\fP 0x4000" .br .ti -1c .RI "#define \fBP_KEEP\fP 0x8000" .br .ti -1c .RI "#define \fBmp_lower\fP mp_pb\&.pb\&.pb_lower" .br .ti -1c .RI "#define \fBmp_upper\fP mp_pb\&.pb\&.pb_upper" .br .ti -1c .RI "#define \fBmp_pages\fP mp_pb\&.pb_pages" .br .ti -1c .RI "#define \fBPAGEHDRSZ\fP ((unsigned) offsetof(\fBMDB_page\fP, mp_ptrs))" .br .ti -1c .RI "#define \fBMETADATA\fP(p) ((void *)((char *)(p) + \fBPAGEHDRSZ\fP))" .br .ti -1c .RI "#define \fBPAGEBASE\fP ((\fBMDB_DEVEL\fP) ? \fBPAGEHDRSZ\fP : 0)" .br .ti -1c .RI "#define \fBNUMKEYS\fP(p) (((p)->mp_lower - (\fBPAGEHDRSZ\fP-\fBPAGEBASE\fP)) >> 1)" .br .ti -1c .RI "#define \fBSIZELEFT\fP(p) (\fBindx_t\fP)((p)->mp_upper - (p)->mp_lower)" .br .ti -1c .RI "#define \fBPAGEFILL\fP(env, p)" .br .ti -1c .RI "#define \fBFILL_THRESHOLD\fP 250" .br .ti -1c .RI "#define \fBIS_LEAF\fP(p) \fBF_ISSET\fP((p)->mp_flags, \fBP_LEAF\fP)" .br .ti -1c .RI "#define \fBIS_LEAF2\fP(p) \fBF_ISSET\fP((p)->mp_flags, \fBP_LEAF2\fP)" .br .ti -1c .RI "#define \fBIS_BRANCH\fP(p) \fBF_ISSET\fP((p)->mp_flags, \fBP_BRANCH\fP)" .br .ti -1c .RI "#define \fBIS_OVERFLOW\fP(p) \fBF_ISSET\fP((p)->mp_flags, \fBP_OVERFLOW\fP)" .br .ti -1c .RI "#define \fBIS_SUBP\fP(p) \fBF_ISSET\fP((p)->mp_flags, \fBP_SUBP\fP)" .br .ti -1c .RI "#define \fBOVPAGES\fP(size, psize) ((\fBPAGEHDRSZ\fP-1 + (size)) / (psize) + 1)" .br .ti -1c .RI "#define \fBNEXT_LOOSE_PAGE\fP(p) (*(\fBMDB_page\fP **)((p) + 2))" .br .ti -1c .RI "#define \fBF_BIGDATA\fP 0x01" .br .ti -1c .RI "#define \fBF_SUBDATA\fP 0x02" .br .ti -1c .RI "#define \fBF_DUPDATA\fP 0x04" .br .ti -1c .RI "#define \fBNODE_ADD_FLAGS\fP (\fBF_DUPDATA\fP|\fBF_SUBDATA\fP|\fBMDB_RESERVE\fP|\fBMDB_APPEND\fP)" .br .ti -1c .RI "#define \fBNODESIZE\fP offsetof(\fBMDB_node\fP, mn_data)" .br .ti -1c .RI "#define \fBPGNO_TOPWORD\fP ((\fBpgno_t\fP)-1 > 0xffffffffu ? 32 : 0)" .br .ti -1c .RI "#define \fBINDXSIZE\fP(k) (\fBNODESIZE\fP + ((k) == NULL ? 0 : (k)->mv_size))" .br .ti -1c .RI "#define \fBLEAFSIZE\fP(k, d) (\fBNODESIZE\fP + (k)->mv_size + (d)->mv_size)" .br .ti -1c .RI "#define \fBNODEPTR\fP(p, i) ((\fBMDB_node\fP *)((char *)(p) + (p)->mp_ptrs[i] + \fBPAGEBASE\fP))" .br .ti -1c .RI "#define \fBNODEKEY\fP(node) (void *)((node)->mn_data)" .br .ti -1c .RI "#define \fBNODEDATA\fP(node) (void *)((char *)(node)->mn_data + (node)->mn_ksize)" .br .ti -1c .RI "#define \fBNODEPGNO\fP(node)" .br .ti -1c .RI "#define \fBSETPGNO\fP(node, pgno)" .br .ti -1c .RI "#define \fBNODEDSZ\fP(node) ((node)->mn_lo | ((unsigned)(node)->mn_hi << 16))" .br .ti -1c .RI "#define \fBSETDSZ\fP(node, size)" .br .ti -1c .RI "#define \fBNODEKSZ\fP(node) ((node)->mn_ksize)" .br .ti -1c .RI "#define \fBCOPY_PGNO\fP(dst, src)" .br .ti -1c .RI "#define \fBLEAF2KEY\fP(p, i, ks) ((char *)(p) + \fBPAGEHDRSZ\fP + ((i)*(ks)))" .br .ti -1c .RI "#define \fBMDB_GET_KEY\fP(node, keyptr)" .br .ti -1c .RI "#define \fBMDB_GET_KEY2\fP(node, key) { key\&.mv_size = \fBNODEKSZ\fP(node); key\&.mv_data = \fBNODEKEY\fP(node); }" .br .ti -1c .RI "#define \fBMDB_VALID\fP 0x8000" .br .ti -1c .RI "#define \fBPERSISTENT_FLAGS\fP (0xffff & ~(MDB_VALID))" .br .ti -1c .RI "#define \fBVALID_FLAGS\fP" .br .ti -1c .RI "#define \fBFREE_DBI\fP 0" .br .ti -1c .RI "#define \fBMAIN_DBI\fP 1" .br .ti -1c .RI "#define \fBCORE_DBS\fP 2" .br .ti -1c .RI "#define \fBNUM_METAS\fP 2" .br .ti -1c .RI "#define \fBmm_psize\fP mm_dbs[\fBFREE_DBI\fP]\&.md_pad" .br .ti -1c .RI "#define \fBmm_flags\fP mm_dbs[\fBFREE_DBI\fP]\&.md_flags" .br .ti -1c .RI "#define \fBDB_DIRTY\fP 0x01" .br .ti -1c .RI "#define \fBDB_STALE\fP 0x02" .br .ti -1c .RI "#define \fBDB_NEW\fP 0x04" .br .ti -1c .RI "#define \fBDB_VALID\fP 0x08" .br .ti -1c .RI "#define \fBDB_USRVALID\fP 0x10" .br .ti -1c .RI "#define \fBMDB_TXN_BEGIN_FLAGS\fP \fBMDB_RDONLY\fP" .br .ti -1c .RI "#define \fBMDB_TXN_RDONLY\fP \fBMDB_RDONLY\fP" .br .ti -1c .RI "#define \fBMDB_TXN_WRITEMAP\fP \fBMDB_WRITEMAP\fP" .br .ti -1c .RI "#define \fBMDB_TXN_FINISHED\fP 0x01" .br .ti -1c .RI "#define \fBMDB_TXN_ERROR\fP 0x02" .br .ti -1c .RI "#define \fBMDB_TXN_DIRTY\fP 0x04" .br .ti -1c .RI "#define \fBMDB_TXN_SPILLS\fP 0x08" .br .ti -1c .RI "#define \fBMDB_TXN_HAS_CHILD\fP 0x10" .br .ti -1c .RI "#define \fBMDB_TXN_BLOCKED\fP (\fBMDB_TXN_FINISHED\fP|\fBMDB_TXN_ERROR\fP|\fBMDB_TXN_HAS_CHILD\fP)" .br .ti -1c .RI "#define \fBCURSOR_STACK\fP 32" .br .ti -1c .RI "#define \fBC_INITIALIZED\fP 0x01" .br .ti -1c .RI "#define \fBC_EOF\fP 0x02" .br .ti -1c .RI "#define \fBC_SUB\fP 0x04" .br .ti -1c .RI "#define \fBC_DEL\fP 0x08" .br .ti -1c .RI "#define \fBC_UNTRACK\fP 0x40" .br .ti -1c .RI "#define \fBMDB_FATAL_ERROR\fP 0x80000000U" .br .ti -1c .RI "#define \fBMDB_ENV_ACTIVE\fP 0x20000000U" .br .ti -1c .RI "#define \fBMDB_ENV_TXKEY\fP 0x10000000U" .br .ti -1c .RI "#define \fBMDB_FSYNCONLY\fP 0x08000000U" .br .ti -1c .RI "#define \fBme_pglast\fP me_pgstate\&.mf_pglast" .br .ti -1c .RI "#define \fBme_pghead\fP me_pgstate\&.mf_pghead" .br .ti -1c .RI "#define \fBme_rmutex\fP me_txns->mti_rmutex" .br .ti -1c .RI "#define \fBme_wmutex\fP me_txns->mti_wmutex" .br .ti -1c .RI "#define \fBMDB_COMMIT_PAGES\fP 64" .br .ti -1c .RI "#define \fBMAX_WRITE\fP (0x40000000U >> (sizeof(ssize_t) == 4))" .br .ti -1c .RI "#define \fBTXN_DBI_EXIST\fP(txn, dbi, validity) ((txn) && (dbi)<(txn)->mt_numdbs && ((txn)->mt_dbflags[dbi] & (validity)))" .br .ti -1c .RI "#define \fBTXN_DBI_CHANGED\fP(txn, dbi) ((txn)->mt_dbiseqs[dbi] != (txn)->mt_env->me_dbiseqs[dbi])" .br .ti -1c .RI "#define \fBMDB_END_NAMES\fP" .br .ti -1c .RI "#define \fBMDB_END_OPMASK\fP 0x0F" .br .ti -1c .RI "#define \fBMDB_END_UPDATE\fP 0x10" .br .ti -1c .RI "#define \fBMDB_END_FREE\fP 0x20" .br .ti -1c .RI "#define \fBMDB_END_SLOT\fP \fBMDB_NOTLS\fP" .br .ti -1c .RI "#define \fBMDB_PS_MODIFY\fP 1" .br .ti -1c .RI "#define \fBMDB_PS_ROOTONLY\fP 2" .br .ti -1c .RI "#define \fBMDB_PS_FIRST\fP 4" .br .ti -1c .RI "#define \fBMDB_PS_LAST\fP 8" .br .ti -1c .RI "#define \fBMDB_SPLIT_REPLACE\fP \fBMDB_APPENDDUP\fP" .br .ti -1c .RI "#define \fBmdb_env_close0\fP(env, excl) mdb_env_close1(env)" .br .ti -1c .RI "#define \fBmdb_cmp_clong\fP \fBmdb_cmp_cint\fP" .br .ti -1c .RI "#define \fBmdb_cassert\fP(mc, expr) mdb_assert0((mc)->mc_txn->mt_env, expr, #expr)" .br .ti -1c .RI "#define \fBmdb_tassert\fP(txn, expr) mdb_assert0((txn)->mt_env, expr, #expr)" .br .ti -1c .RI "#define \fBmdb_eassert\fP(env, expr) mdb_assert0(env, expr, #expr)" .br .ti -1c .RI "#define \fBmdb_assert0\fP(env, expr, expr_txt)" .br .ti -1c .RI "#define \fBDO_PWRITE\fP(rc, fd, ptr, size, len, pos)" .br .ti -1c .RI "#define \fBMDB_ERRCODE_ROFS\fP EROFS" .br .ti -1c .RI "#define \fBMDB_CLOEXEC\fP 0" .br .ti -1c .RI "#define \fBLOCKNAME\fP '/lock\&.mdb'" .br .ti -1c .RI "#define \fBDATANAME\fP '/data\&.mdb'" .br .ti -1c .RI "#define \fBLOCKSUFF\fP '-lock'" .br .ti -1c .RI "#define \fBCHANGEABLE\fP (\fBMDB_NOSYNC\fP|\fBMDB_NOMETASYNC\fP|\fBMDB_MAPASYNC\fP|\fBMDB_NOMEMINIT\fP)" .br .ti -1c .RI "#define \fBCHANGELESS\fP" .br .ti -1c .RI "#define \fBMDB_NOSPILL\fP 0x8000" .br .ti -1c .RI "#define \fBWITH_CURSOR_TRACKING\fP(mn, act)" .br .ti -1c .RI "#define \fBMDB_WBUF\fP (1024*1024)" .br .ti -1c .RI "#define \fBDO_WRITE\fP(rc, fd, ptr, w2, len) len = write(fd, ptr, w2); rc = (len >= 0)" .br .ti -1c .RI "#define \fBDO_WRITE\fP(rc, fd, ptr, w2, len) len = write(fd, ptr, w2); rc = (len >= 0)" .br .in -1c .SS "Typedefs" .in +1c .ti -1c .RI "typedef \fBMDB_ID\fP \fBpgno_t\fP" .br .ti -1c .RI "typedef \fBMDB_ID\fP \fBtxnid_t\fP" .br .ti -1c .RI "typedef uint16_t \fBindx_t\fP" .br .in -1c .PP .RI "\fB\fP" .br .in +1c .in +1c .ti -1c .RI "typedef pthread_mutex_t \fBmdb_mutex_t\fP [1]" .br .ti -1c .RI "typedef pthread_mutex_t * \fBmdb_mutexref_t\fP" .br .in -1c .in -1c .SS "Enumerations" .in +1c .ti -1c .RI "enum { \fBMDB_END_COMMITTED\fP, \fBMDB_END_EMPTY_COMMIT\fP, \fBMDB_END_ABORT\fP, \fBMDB_END_RESET\fP, \fBMDB_END_RESET_TMP\fP, \fBMDB_END_FAIL_BEGIN\fP, \fBMDB_END_FAIL_BEGINCHILD\fP }" .br .ti -1c .RI "enum \fBPidlock_op\fP { \fBPidset\fP = F_SETLK, \fBPidcheck\fP = F_GETLK }" .br .in -1c .SS "Functions" .in +1c .ti -1c .RI "static int \fBmdb_page_alloc\fP (\fBMDB_cursor\fP *mc, int num, \fBMDB_page\fP **mp)" .br .ti -1c .RI "static int \fBmdb_page_new\fP (\fBMDB_cursor\fP *mc, uint32_t flags, int num, \fBMDB_page\fP **mp)" .br .ti -1c .RI "static int \fBmdb_page_touch\fP (\fBMDB_cursor\fP *mc)" .br .ti -1c .RI "static void \fBmdb_txn_end\fP (\fBMDB_txn\fP *txn, unsigned mode)" .br .ti -1c .RI "static int \fBmdb_page_get\fP (\fBMDB_txn\fP *txn, \fBpgno_t\fP pgno, \fBMDB_page\fP **mp, int *lvl)" .br .ti -1c .RI "static int \fBmdb_page_search_root\fP (\fBMDB_cursor\fP *mc, \fBMDB_val\fP *key, int modify)" .br .ti -1c .RI "static int \fBmdb_page_search\fP (\fBMDB_cursor\fP *mc, \fBMDB_val\fP *key, int flags)" .br .ti -1c .RI "static int \fBmdb_page_merge\fP (\fBMDB_cursor\fP *csrc, \fBMDB_cursor\fP *cdst)" .br .ti -1c .RI "static int \fBmdb_page_split\fP (\fBMDB_cursor\fP *mc, \fBMDB_val\fP *newkey, \fBMDB_val\fP *newdata, \fBpgno_t\fP newpgno, unsigned int nflags)" .br .ti -1c .RI "static int \fBmdb_env_read_header\fP (\fBMDB_env\fP *env, \fBMDB_meta\fP *meta)" .br .ti -1c .RI "static \fBMDB_meta\fP * \fBmdb_env_pick_meta\fP (const \fBMDB_env\fP *env)" .br .ti -1c .RI "static int \fBmdb_env_write_meta\fP (\fBMDB_txn\fP *txn)" .br .ti -1c .RI "static void \fBmdb_env_close0\fP (\fBMDB_env\fP *env, int excl)" .br .ti -1c .RI "static \fBMDB_node\fP * \fBmdb_node_search\fP (\fBMDB_cursor\fP *mc, \fBMDB_val\fP *key, int *exactp)" .br .ti -1c .RI "static int \fBmdb_node_add\fP (\fBMDB_cursor\fP *mc, \fBindx_t\fP indx, \fBMDB_val\fP *key, \fBMDB_val\fP *data, \fBpgno_t\fP pgno, unsigned int flags)" .br .ti -1c .RI "static void \fBmdb_node_del\fP (\fBMDB_cursor\fP *mc, int ksize)" .br .ti -1c .RI "static void \fBmdb_node_shrink\fP (\fBMDB_page\fP *mp, \fBindx_t\fP indx)" .br .ti -1c .RI "static int \fBmdb_node_move\fP (\fBMDB_cursor\fP *csrc, \fBMDB_cursor\fP *cdst, int fromleft)" .br .ti -1c .RI "static int \fBmdb_node_read\fP (\fBMDB_txn\fP *txn, \fBMDB_node\fP *leaf, \fBMDB_val\fP *data)" .br .ti -1c .RI "static size_t \fBmdb_leaf_size\fP (\fBMDB_env\fP *env, \fBMDB_val\fP *key, \fBMDB_val\fP *data)" .br .ti -1c .RI "static size_t \fBmdb_branch_size\fP (\fBMDB_env\fP *env, \fBMDB_val\fP *key)" .br .ti -1c .RI "static int \fBmdb_rebalance\fP (\fBMDB_cursor\fP *mc)" .br .ti -1c .RI "static int \fBmdb_update_key\fP (\fBMDB_cursor\fP *mc, \fBMDB_val\fP *key)" .br .ti -1c .RI "static void \fBmdb_cursor_pop\fP (\fBMDB_cursor\fP *mc)" .br .ti -1c .RI "static int \fBmdb_cursor_push\fP (\fBMDB_cursor\fP *mc, \fBMDB_page\fP *mp)" .br .ti -1c .RI "static int \fBmdb_cursor_del0\fP (\fBMDB_cursor\fP *mc)" .br .ti -1c .RI "static int \fBmdb_del0\fP (\fBMDB_txn\fP *txn, \fBMDB_dbi\fP dbi, \fBMDB_val\fP *key, \fBMDB_val\fP *data, unsigned flags)" .br .ti -1c .RI "static int \fBmdb_cursor_sibling\fP (\fBMDB_cursor\fP *mc, int move_right)" .br .ti -1c .RI "static int \fBmdb_cursor_next\fP (\fBMDB_cursor\fP *mc, \fBMDB_val\fP *key, \fBMDB_val\fP *data, \fBMDB_cursor_op\fP op)" .br .ti -1c .RI "static int \fBmdb_cursor_prev\fP (\fBMDB_cursor\fP *mc, \fBMDB_val\fP *key, \fBMDB_val\fP *data, \fBMDB_cursor_op\fP op)" .br .ti -1c .RI "static int \fBmdb_cursor_set\fP (\fBMDB_cursor\fP *mc, \fBMDB_val\fP *key, \fBMDB_val\fP *data, \fBMDB_cursor_op\fP op, int *exactp)" .br .ti -1c .RI "static int \fBmdb_cursor_first\fP (\fBMDB_cursor\fP *mc, \fBMDB_val\fP *key, \fBMDB_val\fP *data)" .br .ti -1c .RI "static int \fBmdb_cursor_last\fP (\fBMDB_cursor\fP *mc, \fBMDB_val\fP *key, \fBMDB_val\fP *data)" .br .ti -1c .RI "static void \fBmdb_cursor_init\fP (\fBMDB_cursor\fP *mc, \fBMDB_txn\fP *txn, \fBMDB_dbi\fP dbi, \fBMDB_xcursor\fP *mx)" .br .ti -1c .RI "static void \fBmdb_xcursor_init0\fP (\fBMDB_cursor\fP *mc)" .br .ti -1c .RI "static void \fBmdb_xcursor_init1\fP (\fBMDB_cursor\fP *mc, \fBMDB_node\fP *node)" .br .ti -1c .RI "static void \fBmdb_xcursor_init2\fP (\fBMDB_cursor\fP *mc, \fBMDB_xcursor\fP *src_mx, int force)" .br .ti -1c .RI "static int \fBmdb_drop0\fP (\fBMDB_cursor\fP *mc, int subs)" .br .ti -1c .RI "static void \fBmdb_default_cmp\fP (\fBMDB_txn\fP *txn, \fBMDB_dbi\fP dbi)" .br .ti -1c .RI "static int \fBmdb_reader_check0\fP (\fBMDB_env\fP *env, int rlocked, int *dead)" .br .ti -1c .RI "char *\fBESECT\fP \fBmdb_version\fP (int *major, int *minor, int *patch)" .br .RI "\fIReturn the LMDB library version information\&. \fP" .ti -1c .RI "char * \fBmdb_strerror\fP (int err)" .br .RI "\fIReturn a string describing a given error code\&. \fP" .ti -1c .RI "static void \fBESECT\fP \fBmdb_assert_fail\fP (\fBMDB_env\fP *env, const char *expr_txt, const char *func, const char *file, int line)" .br .ti -1c .RI "int \fBmdb_cmp\fP (\fBMDB_txn\fP *txn, \fBMDB_dbi\fP dbi, const \fBMDB_val\fP *a, const \fBMDB_val\fP *b)" .br .RI "\fICompare two data items according to a particular database\&. \fP" .ti -1c .RI "int \fBmdb_dcmp\fP (\fBMDB_txn\fP *txn, \fBMDB_dbi\fP dbi, const \fBMDB_val\fP *a, const \fBMDB_val\fP *b)" .br .RI "\fICompare two data items according to a particular database\&. \fP" .ti -1c .RI "static \fBMDB_page\fP * \fBmdb_page_malloc\fP (\fBMDB_txn\fP *txn, unsigned num)" .br .ti -1c .RI "static void \fBmdb_page_free\fP (\fBMDB_env\fP *env, \fBMDB_page\fP *mp)" .br .ti -1c .RI "static void \fBmdb_dpage_free\fP (\fBMDB_env\fP *env, \fBMDB_page\fP *dp)" .br .ti -1c .RI "static void \fBmdb_dlist_free\fP (\fBMDB_txn\fP *txn)" .br .ti -1c .RI "static int \fBmdb_page_loose\fP (\fBMDB_cursor\fP *mc, \fBMDB_page\fP *mp)" .br .ti -1c .RI "static int \fBmdb_pages_xkeep\fP (\fBMDB_cursor\fP *mc, unsigned pflags, int all)" .br .ti -1c .RI "static int \fBmdb_page_flush\fP (\fBMDB_txn\fP *txn, int keep)" .br .ti -1c .RI "static int \fBmdb_page_spill\fP (\fBMDB_cursor\fP *m0, \fBMDB_val\fP *key, \fBMDB_val\fP *data)" .br .ti -1c .RI "static \fBtxnid_t\fP \fBmdb_find_oldest\fP (\fBMDB_txn\fP *txn)" .br .ti -1c .RI "static void \fBmdb_page_dirty\fP (\fBMDB_txn\fP *txn, \fBMDB_page\fP *mp)" .br .ti -1c .RI "static void \fBmdb_page_copy\fP (\fBMDB_page\fP *dst, \fBMDB_page\fP *src, unsigned int psize)" .br .ti -1c .RI "static int \fBmdb_page_unspill\fP (\fBMDB_txn\fP *txn, \fBMDB_page\fP *mp, \fBMDB_page\fP **ret)" .br .ti -1c .RI "int \fBmdb_env_sync\fP (\fBMDB_env\fP *env, int force)" .br .RI "\fIFlush the data buffers to disk\&. \fP" .ti -1c .RI "static int \fBmdb_cursor_shadow\fP (\fBMDB_txn\fP *src, \fBMDB_txn\fP *dst)" .br .ti -1c .RI "static void \fBmdb_cursors_close\fP (\fBMDB_txn\fP *txn, unsigned merge)" .br .ti -1c .RI "static int \fBmdb_reader_pid\fP (\fBMDB_env\fP *env, enum Pidlock_op op, MDB_PID_T pid)" .br .ti -1c .RI "static int \fBmdb_txn_renew0\fP (\fBMDB_txn\fP *txn)" .br .ti -1c .RI "int \fBmdb_txn_renew\fP (\fBMDB_txn\fP *txn)" .br .RI "\fIRenew a read-only transaction\&. \fP" .ti -1c .RI "int \fBmdb_txn_begin\fP (\fBMDB_env\fP *env, \fBMDB_txn\fP *parent, unsigned int flags, \fBMDB_txn\fP **ret)" .br .RI "\fICreate a transaction for use with the environment\&. \fP" .ti -1c .RI "\fBMDB_env\fP * \fBmdb_txn_env\fP (\fBMDB_txn\fP *txn)" .br .RI "\fIReturns the transaction's \fBMDB_env\fP\&. \fP" .ti -1c .RI "size_t \fBmdb_txn_id\fP (\fBMDB_txn\fP *txn)" .br .RI "\fIReturn the transaction's ID\&. \fP" .ti -1c .RI "static void \fBmdb_dbis_update\fP (\fBMDB_txn\fP *txn, int keep)" .br .ti -1c .RI "void \fBmdb_txn_reset\fP (\fBMDB_txn\fP *txn)" .br .RI "\fIReset a read-only transaction\&. \fP" .ti -1c .RI "void \fBmdb_txn_abort\fP (\fBMDB_txn\fP *txn)" .br .RI "\fIAbandon all the operations of the transaction instead of saving them\&. \fP" .ti -1c .RI "static int \fBmdb_freelist_save\fP (\fBMDB_txn\fP *txn)" .br .ti -1c .RI "int \fBmdb_txn_commit\fP (\fBMDB_txn\fP *txn)" .br .RI "\fICommit all the operations of a transaction into the database\&. \fP" .ti -1c .RI "static void \fBESECT\fP \fBmdb_env_init_meta0\fP (\fBMDB_env\fP *env, \fBMDB_meta\fP *meta)" .br .ti -1c .RI "static int \fBESECT\fP \fBmdb_env_init_meta\fP (\fBMDB_env\fP *env, \fBMDB_meta\fP *meta)" .br .ti -1c .RI "int \fBESECT\fP \fBmdb_env_create\fP (\fBMDB_env\fP **env)" .br .RI "\fICreate an LMDB environment handle\&. \fP" .ti -1c .RI "static int \fBESECT\fP \fBmdb_env_map\fP (\fBMDB_env\fP *env, void *addr)" .br .ti -1c .RI "int \fBESECT\fP \fBmdb_env_set_mapsize\fP (\fBMDB_env\fP *env, size_t size)" .br .RI "\fISet the size of the memory map to use for this environment\&. \fP" .ti -1c .RI "int \fBESECT\fP \fBmdb_env_set_maxdbs\fP (\fBMDB_env\fP *env, \fBMDB_dbi\fP dbs)" .br .RI "\fISet the maximum number of named databases for the environment\&. \fP" .ti -1c .RI "int \fBESECT\fP \fBmdb_env_set_maxreaders\fP (\fBMDB_env\fP *env, unsigned int readers)" .br .RI "\fISet the maximum number of threads/reader slots for the environment\&. \fP" .ti -1c .RI "int \fBESECT\fP \fBmdb_env_get_maxreaders\fP (\fBMDB_env\fP *env, unsigned int *readers)" .br .RI "\fIGet the maximum number of threads/reader slots for the environment\&. \fP" .ti -1c .RI "static int \fBESECT\fP \fBmdb_fsize\fP (\fBHANDLE\fP fd, size_t *size)" .br .ti -1c .RI "static int \fBESECT\fP \fBmdb_env_open2\fP (\fBMDB_env\fP *env)" .br .ti -1c .RI "static void \fBmdb_env_reader_dest\fP (void *ptr)" .br .ti -1c .RI "static int \fBESECT\fP \fBmdb_env_share_locks\fP (\fBMDB_env\fP *env, int *excl)" .br .ti -1c .RI "static int \fBESECT\fP \fBmdb_env_excl_lock\fP (\fBMDB_env\fP *env, int *excl)" .br .ti -1c .RI "static int \fBESECT\fP \fBmdb_env_setup_locks\fP (\fBMDB_env\fP *env, char *lpath, int mode, int *excl)" .br .ti -1c .RI "int \fBESECT\fP \fBmdb_env_open\fP (\fBMDB_env\fP *env, const char *path, unsigned int flags, \fBmdb_mode_t\fP mode)" .br .RI "\fIOpen an environment handle\&. \fP" .ti -1c .RI "void \fBESECT\fP \fBmdb_env_close\fP (\fBMDB_env\fP *env)" .br .RI "\fIClose the environment and release the memory map\&. \fP" .ti -1c .RI "static int \fBmdb_cmp_long\fP (const \fBMDB_val\fP *a, const \fBMDB_val\fP *b)" .br .ti -1c .RI "static int \fBmdb_cmp_int\fP (const \fBMDB_val\fP *a, const \fBMDB_val\fP *b)" .br .ti -1c .RI "static int \fBmdb_cmp_cint\fP (const \fBMDB_val\fP *a, const \fBMDB_val\fP *b)" .br .ti -1c .RI "static int \fBmdb_cmp_memn\fP (const \fBMDB_val\fP *a, const \fBMDB_val\fP *b)" .br .ti -1c .RI "static int \fBmdb_cmp_memnr\fP (const \fBMDB_val\fP *a, const \fBMDB_val\fP *b)" .br .ti -1c .RI "static int \fBmdb_page_search_lowest\fP (\fBMDB_cursor\fP *mc)" .br .ti -1c .RI "static int \fBmdb_ovpage_free\fP (\fBMDB_cursor\fP *mc, \fBMDB_page\fP *mp)" .br .ti -1c .RI "int \fBmdb_get\fP (\fBMDB_txn\fP *txn, \fBMDB_dbi\fP dbi, \fBMDB_val\fP *key, \fBMDB_val\fP *data)" .br .RI "\fIGet items from a database\&. \fP" .ti -1c .RI "int \fBmdb_cursor_get\fP (\fBMDB_cursor\fP *mc, \fBMDB_val\fP *key, \fBMDB_val\fP *data, \fBMDB_cursor_op\fP op)" .br .RI "\fIRetrieve by cursor\&. \fP" .ti -1c .RI "static int \fBmdb_cursor_touch\fP (\fBMDB_cursor\fP *mc)" .br .ti -1c .RI "int \fBmdb_cursor_put\fP (\fBMDB_cursor\fP *mc, \fBMDB_val\fP *key, \fBMDB_val\fP *data, unsigned int flags)" .br .RI "\fIStore by cursor\&. \fP" .ti -1c .RI "int \fBmdb_cursor_del\fP (\fBMDB_cursor\fP *mc, unsigned int flags)" .br .RI "\fIDelete current key/data pair\&. \fP" .ti -1c .RI "int \fBmdb_cursor_open\fP (\fBMDB_txn\fP *txn, \fBMDB_dbi\fP dbi, \fBMDB_cursor\fP **ret)" .br .RI "\fICreate a cursor handle\&. \fP" .ti -1c .RI "int \fBmdb_cursor_renew\fP (\fBMDB_txn\fP *txn, \fBMDB_cursor\fP *mc)" .br .RI "\fIRenew a cursor handle\&. \fP" .ti -1c .RI "int \fBmdb_cursor_count\fP (\fBMDB_cursor\fP *mc, size_t *countp)" .br .RI "\fIReturn count of duplicates for current key\&. \fP" .ti -1c .RI "void \fBmdb_cursor_close\fP (\fBMDB_cursor\fP *mc)" .br .RI "\fIClose a cursor handle\&. \fP" .ti -1c .RI "\fBMDB_txn\fP * \fBmdb_cursor_txn\fP (\fBMDB_cursor\fP *mc)" .br .RI "\fIReturn the cursor's transaction handle\&. \fP" .ti -1c .RI "\fBMDB_dbi\fP \fBmdb_cursor_dbi\fP (\fBMDB_cursor\fP *mc)" .br .RI "\fIReturn the cursor's database handle\&. \fP" .ti -1c .RI "static void \fBmdb_cursor_copy\fP (const \fBMDB_cursor\fP *csrc, \fBMDB_cursor\fP *cdst)" .br .ti -1c .RI "int \fBmdb_del\fP (\fBMDB_txn\fP *txn, \fBMDB_dbi\fP dbi, \fBMDB_val\fP *key, \fBMDB_val\fP *data)" .br .RI "\fIDelete items from a database\&. \fP" .ti -1c .RI "int \fBmdb_put\fP (\fBMDB_txn\fP *txn, \fBMDB_dbi\fP dbi, \fBMDB_val\fP *key, \fBMDB_val\fP *data, unsigned int flags)" .br .RI "\fIStore items into a database\&. \fP" .ti -1c .RI "static THREAD_RET \fBESECT\fP CALL_CONV \fBmdb_env_copythr\fP (void *arg)" .br .ti -1c .RI "static int \fBESECT\fP \fBmdb_env_cthr_toggle\fP (\fBmdb_copy\fP *my, int st)" .br .ti -1c .RI "static int \fBESECT\fP \fBmdb_env_cwalk\fP (\fBmdb_copy\fP *my, \fBpgno_t\fP *pg, int flags)" .br .ti -1c .RI "static int \fBESECT\fP \fBmdb_env_copyfd1\fP (\fBMDB_env\fP *env, \fBHANDLE\fP fd)" .br .ti -1c .RI "static int \fBESECT\fP \fBmdb_env_copyfd0\fP (\fBMDB_env\fP *env, \fBHANDLE\fP fd)" .br .ti -1c .RI "int \fBESECT\fP \fBmdb_env_copyfd2\fP (\fBMDB_env\fP *env, \fBHANDLE\fP fd, unsigned int flags)" .br .ti -1c .RI "int \fBESECT\fP \fBmdb_env_copyfd\fP (\fBMDB_env\fP *env, \fBHANDLE\fP fd)" .br .ti -1c .RI "int \fBESECT\fP \fBmdb_env_copy2\fP (\fBMDB_env\fP *env, const char *path, unsigned int flags)" .br .RI "\fICopy an LMDB environment to the specified path, with options\&. \fP" .ti -1c .RI "int \fBESECT\fP \fBmdb_env_copy\fP (\fBMDB_env\fP *env, const char *path)" .br .RI "\fICopy an LMDB environment to the specified path\&. \fP" .ti -1c .RI "int \fBESECT\fP \fBmdb_env_set_flags\fP (\fBMDB_env\fP *env, unsigned int flag, int onoff)" .br .RI "\fISet environment flags\&. \fP" .ti -1c .RI "int \fBESECT\fP \fBmdb_env_get_flags\fP (\fBMDB_env\fP *env, unsigned int *arg)" .br .RI "\fIGet environment flags\&. \fP" .ti -1c .RI "int \fBESECT\fP \fBmdb_env_set_userctx\fP (\fBMDB_env\fP *env, void *ctx)" .br .RI "\fISet application information associated with the \fBMDB_env\fP\&. \fP" .ti -1c .RI "void *\fBESECT\fP \fBmdb_env_get_userctx\fP (\fBMDB_env\fP *env)" .br .RI "\fIGet the application information associated with the \fBMDB_env\fP\&. \fP" .ti -1c .RI "int \fBESECT\fP \fBmdb_env_set_assert\fP (\fBMDB_env\fP *env, \fBMDB_assert_func\fP *func)" .br .ti -1c .RI "int \fBESECT\fP \fBmdb_env_get_path\fP (\fBMDB_env\fP *env, const char **arg)" .br .RI "\fIReturn the path that was used in \fBmdb_env_open()\fP\&. \fP" .ti -1c .RI "int \fBESECT\fP \fBmdb_env_get_fd\fP (\fBMDB_env\fP *env, \fBmdb_filehandle_t\fP *arg)" .br .RI "\fIReturn the filedescriptor for the given environment\&. \fP" .ti -1c .RI "static int \fBESECT\fP \fBmdb_stat0\fP (\fBMDB_env\fP *env, \fBMDB_db\fP *db, \fBMDB_stat\fP *arg)" .br .ti -1c .RI "int \fBESECT\fP \fBmdb_env_stat\fP (\fBMDB_env\fP *env, \fBMDB_stat\fP *arg)" .br .RI "\fIReturn statistics about the LMDB environment\&. \fP" .ti -1c .RI "int \fBESECT\fP \fBmdb_env_info\fP (\fBMDB_env\fP *env, \fBMDB_envinfo\fP *arg)" .br .RI "\fIReturn information about the LMDB environment\&. \fP" .ti -1c .RI "int \fBmdb_dbi_open\fP (\fBMDB_txn\fP *txn, const char *name, unsigned int flags, \fBMDB_dbi\fP *dbi)" .br .RI "\fIOpen a database in the environment\&. \fP" .ti -1c .RI "int \fBESECT\fP \fBmdb_stat\fP (\fBMDB_txn\fP *txn, \fBMDB_dbi\fP dbi, \fBMDB_stat\fP *arg)" .br .RI "\fIRetrieve statistics for a database\&. \fP" .ti -1c .RI "void \fBmdb_dbi_close\fP (\fBMDB_env\fP *env, \fBMDB_dbi\fP dbi)" .br .RI "\fIClose a database handle\&. Normally unnecessary\&. Use with care: \fP" .ti -1c .RI "int \fBmdb_dbi_flags\fP (\fBMDB_txn\fP *txn, \fBMDB_dbi\fP dbi, unsigned int *flags)" .br .RI "\fIRetrieve the DB flags for a database handle\&. \fP" .ti -1c .RI "int \fBmdb_drop\fP (\fBMDB_txn\fP *txn, \fBMDB_dbi\fP dbi, int del)" .br .RI "\fIEmpty or delete+close a database\&. \fP" .ti -1c .RI "int \fBmdb_set_compare\fP (\fBMDB_txn\fP *txn, \fBMDB_dbi\fP dbi, \fBMDB_cmp_func\fP *cmp)" .br .RI "\fISet a custom key comparison function for a database\&. \fP" .ti -1c .RI "int \fBmdb_set_dupsort\fP (\fBMDB_txn\fP *txn, \fBMDB_dbi\fP dbi, \fBMDB_cmp_func\fP *cmp)" .br .RI "\fISet a custom data comparison function for a \fBMDB_DUPSORT\fP database\&. \fP" .ti -1c .RI "int \fBmdb_set_relfunc\fP (\fBMDB_txn\fP *txn, \fBMDB_dbi\fP dbi, \fBMDB_rel_func\fP *rel)" .br .RI "\fISet a relocation function for a \fBMDB_FIXEDMAP\fP database\&. \fP" .ti -1c .RI "int \fBmdb_set_relctx\fP (\fBMDB_txn\fP *txn, \fBMDB_dbi\fP dbi, void *ctx)" .br .RI "\fISet a context pointer for a \fBMDB_FIXEDMAP\fP database's relocation function\&. \fP" .ti -1c .RI "int \fBESECT\fP \fBmdb_env_get_maxkeysize\fP (\fBMDB_env\fP *env)" .br .RI "\fIGet the maximum size of keys and \fBMDB_DUPSORT\fP data we can write\&. \fP" .ti -1c .RI "int \fBESECT\fP \fBmdb_reader_list\fP (\fBMDB_env\fP *env, \fBMDB_msg_func\fP *func, void *ctx)" .br .RI "\fIDump the entries in the reader lock table\&. \fP" .ti -1c .RI "static int \fBESECT\fP \fBmdb_pid_insert\fP (MDB_PID_T *ids, MDB_PID_T pid)" .br .ti -1c .RI "int \fBESECT\fP \fBmdb_reader_check\fP (\fBMDB_env\fP *env, int *dead)" .br .RI "\fICheck for stale entries in the reader lock table\&. \fP" .in -1c .SS "Variables" .in +1c .ti -1c .RI "static char *const \fBmdb_errstr\fP []" .br .in -1c .SH "Detailed Description" .PP Lightning memory-mapped database library\&. A Btree-based database management library modeled loosely on the BerkeleyDB API, but much simplified\&. .SH "Macro Definition Documentation" .PP .SS "#define ESECT __attribute__ ((section('text_env')))" Put infrequently used env functions in separate section .SS "#define mr_txnid mru\&.mrx\&.mrb_txnid" shorthand for mrb_txnid .SS "#define mm_psize mm_dbs[\fBFREE_DBI\fP]\&.md_pad" The size of pages used in this DB .SS "#define mm_flags mm_dbs[\fBFREE_DBI\fP]\&.md_flags" Any persistent environment flags\&. \fBEnvironment Flags\fP .SS "#define MDB_FATAL_ERROR 0x80000000U" Failed to update the meta page\&. Probably an I/O error\&. .SS "#define MDB_ENV_ACTIVE 0x20000000U" Some fields are initialized\&. .SS "#define MDB_ENV_TXKEY 0x10000000U" me_txkey is set .SS "#define MDB_FSYNCONLY 0x08000000U" fdatasync is unreliable .SS "#define me_rmutex me_txns->mti_rmutex" Shared reader lock .SS "#define me_wmutex me_txns->mti_wmutex" Shared writer lock .SS "#define DO_PWRITE(rc, fd, ptr, size, len, pos)" \fBValue:\fP .PP .nf do { \ len = pwrite(fd, ptr, size, pos); \ if (len == -1 && ErrCode() == EINTR) continue; \ rc = (len >= 0); break; } while(1) .fi .SH "Author" .PP Generated automatically by Doxygen for LMDB from the source code\&.