From a7639a66a493818dc55f3ed77bebe659b6cdd2fd Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Thu, 25 Sep 2014 19:25:56 +0100 Subject: [PATCH 01/18] Android also only has memalign --- libraries/liblmdb/mdb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c index 6cc343326e..60dfd8db3e 100644 --- a/libraries/liblmdb/mdb.c +++ b/libraries/liblmdb/mdb.c @@ -90,7 +90,7 @@ extern int cacheflush(char *addr, int nbytes, int cache); #include #include -#if defined(__sun) +#if defined(__sun) || defined(ANDROID) /* Most platforms have posix_memalign, older may only have memalign */ #define HAVE_MEMALIGN 1 #include From 9eede0b103babdb942dbe2a916a13739a5fc4bfe Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Wed, 16 Jul 2014 09:24:45 -0700 Subject: [PATCH 02/18] Free write mutex earlier in txn_reset0 --- libraries/liblmdb/mdb.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c index 60dfd8db3e..1d52c4f82d 100644 --- a/libraries/liblmdb/mdb.c +++ b/libraries/liblmdb/mdb.c @@ -2774,12 +2774,26 @@ mdb_txn_reset0(MDB_txn *txn, const char *act) txn->mt_numdbs = 0; /* close nothing if called again */ txn->mt_dbxs = NULL; /* mark txn as reset */ } else { + pgno_t *pghead = env->me_pghead; + env->me_pghead = NULL; + env->me_pglast = 0; + + if (!txn->mt_parent) { + if (mdb_midl_shrink(&txn->mt_free_pgs)) + env->me_free_pgs = txn->mt_free_pgs; + + env->me_txn = NULL; + /* The writer mutex was locked in mdb_txn_begin. */ + if (env->me_txns) + UNLOCK_MUTEX_W(env); + } + mdb_cursors_close(txn, 0); if (!(env->me_flags & MDB_WRITEMAP)) { mdb_dlist_free(txn); } - mdb_midl_free(env->me_pghead); + mdb_midl_free(pghead); if (txn->mt_parent) { txn->mt_parent->mt_child = NULL; @@ -2787,18 +2801,7 @@ mdb_txn_reset0(MDB_txn *txn, const char *act) mdb_midl_free(txn->mt_free_pgs); mdb_midl_free(txn->mt_spill_pgs); free(txn->mt_u.dirty_list); - return; } - - if (mdb_midl_shrink(&txn->mt_free_pgs)) - env->me_free_pgs = txn->mt_free_pgs; - env->me_pghead = NULL; - env->me_pglast = 0; - - env->me_txn = NULL; - /* The writer mutex was locked in mdb_txn_begin. */ - if (env->me_txns) - UNLOCK_MUTEX_W(env); } } From df9da7c7bef99fb96ddc070dda2d505a8b8e8143 Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Sun, 20 Jul 2014 08:10:34 -0700 Subject: [PATCH 03/18] Must do dlist_free before releasing Wmutex --- libraries/liblmdb/mdb.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c index 1d52c4f82d..81fe20510d 100644 --- a/libraries/liblmdb/mdb.c +++ b/libraries/liblmdb/mdb.c @@ -2778,6 +2778,10 @@ mdb_txn_reset0(MDB_txn *txn, const char *act) env->me_pghead = NULL; env->me_pglast = 0; + if (!(env->me_flags & MDB_WRITEMAP)) { + mdb_dlist_free(txn); + } + if (!txn->mt_parent) { if (mdb_midl_shrink(&txn->mt_free_pgs)) env->me_free_pgs = txn->mt_free_pgs; @@ -2790,9 +2794,6 @@ mdb_txn_reset0(MDB_txn *txn, const char *act) mdb_cursors_close(txn, 0); - if (!(env->me_flags & MDB_WRITEMAP)) { - mdb_dlist_free(txn); - } mdb_midl_free(pghead); if (txn->mt_parent) { From 20ad21dcc4c3d0b01ea1e638e397fa451ce7b966 Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Wed, 1 Oct 2014 21:00:03 +0100 Subject: [PATCH 04/18] Don't use -fPIC for static lib --- libraries/liblmdb/Makefile | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/libraries/liblmdb/Makefile b/libraries/liblmdb/Makefile index 25c1095466..97b571747d 100644 --- a/libraries/liblmdb/Makefile +++ b/libraries/liblmdb/Makefile @@ -50,9 +50,9 @@ test: all liblmdb.a: mdb.o midl.o ar rs $@ mdb.o midl.o -liblmdb.so: mdb.o midl.o +liblmdb.so: mdb.lo midl.lo # $(CC) $(LDFLAGS) -pthread -shared -Wl,-Bsymbolic -o $@ mdb.o midl.o $(SOLIBS) - $(CC) $(LDFLAGS) -pthread -shared -o $@ mdb.o midl.o $(SOLIBS) + $(CC) $(LDFLAGS) -pthread -shared -o $@ mdb.lo midl.lo $(SOLIBS) mdb_stat: mdb_stat.o liblmdb.a mdb_copy: mdb_copy.o liblmdb.a @@ -66,10 +66,16 @@ mtest5: mtest5.o liblmdb.a mtest6: mtest6.o liblmdb.a mdb.o: mdb.c lmdb.h midl.h - $(CC) $(CFLAGS) -fPIC $(CPPFLAGS) -c mdb.c + $(CC) $(CFLAGS) $(CPPFLAGS) -c mdb.c midl.o: midl.c midl.h - $(CC) $(CFLAGS) -fPIC $(CPPFLAGS) -c midl.c + $(CC) $(CFLAGS) $(CPPFLAGS) -c midl.c + +mdb.lo: mdb.c lmdb.h midl.h + $(CC) $(CFLAGS) -fPIC $(CPPFLAGS) -c mdb.c -o $@ + +midl.lo: midl.c midl.h + $(CC) $(CFLAGS) -fPIC $(CPPFLAGS) -c midl.c -o $@ %: %.o $(CC) $(CFLAGS) $(LDFLAGS) $^ $(LDLIBS) -o $@ From 9227f66673f5a5ac6cd2a593227f1935a7e421e0 Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Thu, 2 Oct 2014 21:33:35 +0100 Subject: [PATCH 05/18] ITS#7952 .gitignore mdb_dump/load --- libraries/liblmdb/.gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries/liblmdb/.gitignore b/libraries/liblmdb/.gitignore index f3277afe42..bfa255a98c 100644 --- a/libraries/liblmdb/.gitignore +++ b/libraries/liblmdb/.gitignore @@ -3,6 +3,8 @@ mtest[23456] testdb mdb_copy mdb_stat +mdb_dump +mdb_load *.[ao] *.so *.exe From 0482f1898d7ba25892ac82e6fa5b08fea4d4d28a Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Thu, 2 Oct 2014 21:35:15 +0100 Subject: [PATCH 06/18] ITS#7953 .gitignore *.lo --- libraries/liblmdb/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/liblmdb/.gitignore b/libraries/liblmdb/.gitignore index bfa255a98c..d5102a87c0 100644 --- a/libraries/liblmdb/.gitignore +++ b/libraries/liblmdb/.gitignore @@ -5,6 +5,7 @@ mdb_copy mdb_stat mdb_dump mdb_load +*.lo *.[ao] *.so *.exe From af99820ac88188a3f22656cdce5e75a64c315005 Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Thu, 2 Oct 2014 21:58:20 +0100 Subject: [PATCH 07/18] ITS#7955, #7671 fix MDB_PREV_DUP --- libraries/liblmdb/mdb.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c index 81fe20510d..a7659a5b3c 100644 --- a/libraries/liblmdb/mdb.c +++ b/libraries/liblmdb/mdb.c @@ -5428,11 +5428,11 @@ mdb_cursor_prev(MDB_cursor *mc, MDB_val *key, MDB_val *data, MDB_cursor_op op) } return rc; } - } else { - mc->mc_xcursor->mx_cursor.mc_flags &= ~(C_INITIALIZED|C_EOF); - if (op == MDB_PREV_DUP) - return MDB_NOTFOUND; } + } else { + mc->mc_xcursor->mx_cursor.mc_flags &= ~(C_INITIALIZED|C_EOF); + if (op == MDB_PREV_DUP) + return MDB_NOTFOUND; } } From 98ed192949fcc3f0861c68a694dd5e1c0add14f4 Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Thu, 2 Oct 2014 22:11:43 +0100 Subject: [PATCH 08/18] ITS#7956 fix compact of empty env --- libraries/liblmdb/mdb.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c index a7659a5b3c..cfa24bf0db 100644 --- a/libraries/liblmdb/mdb.c +++ b/libraries/liblmdb/mdb.c @@ -8589,8 +8589,12 @@ mdb_env_copyfd1(MDB_env *env, HANDLE fd) /* Set metapage 1 */ mm->mm_last_pg = txn->mt_next_pgno - freecount - 1; mm->mm_dbs[1] = txn->mt_dbs[1]; - mm->mm_dbs[1].md_root = mm->mm_last_pg; - mm->mm_txnid = 1; + if (mm->mm_last_pg > 1) { + mm->mm_dbs[1].md_root = mm->mm_last_pg; + mm->mm_txnid = 1; + } else { + mm->mm_dbs[1].md_root = P_INVALID; + } } my.mc_wlen[0] = env->me_psize * 2; my.mc_txn = txn; From c473091f8fb32fda9be46b79abae2429e8f2c083 Mon Sep 17 00:00:00 2001 From: Leo Yuriev Date: Fri, 5 Sep 2014 00:19:16 +0400 Subject: [PATCH 09/18] ITS#7841 trivial cleanup TRIVIA - lmdb: clean testdb-dir while "make test". --- libraries/liblmdb/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/liblmdb/Makefile b/libraries/liblmdb/Makefile index 97b571747d..5f8ef64461 100644 --- a/libraries/liblmdb/Makefile +++ b/libraries/liblmdb/Makefile @@ -44,7 +44,7 @@ clean: rm -rf $(PROGS) *.[ao] *.so *~ testdb test: all - mkdir testdb + rm -rf testdb && mkdir testdb ./mtest && ./mdb_stat testdb liblmdb.a: mdb.o midl.o From 042e76685e98eb676d91094423490200ff2b7d07 Mon Sep 17 00:00:00 2001 From: Jean-Christophe DUBOIS Date: Fri, 3 Oct 2014 20:24:25 +0200 Subject: [PATCH 10/18] ITS#7959 Check fstat return value Signed-off-by: Jean-Christophe DUBOIS --- libraries/liblmdb/mdb.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c index cfa24bf0db..63445ce7af 100644 --- a/libraries/liblmdb/mdb.c +++ b/libraries/liblmdb/mdb.c @@ -8692,14 +8692,23 @@ mdb_env_copyfd0(MDB_env *env, HANDLE fd) #ifdef WIN32 { LARGE_INTEGER fsize; - GetFileSizeEx(env->me_fd, &fsize); + + if (!GetFileSizeEx(env->me_fd, &fsize)) { + rc = ErrCode(); + goto leave; + } + if (w2 > fsize.QuadPart) w2 = fsize.QuadPart; } #else { struct stat st; - fstat(env->me_fd, &st); + + if ((rc = fstat(env->me_fd, &st))) { + goto leave; + } + if (w2 > (size_t)st.st_size) w2 = st.st_size; } From ce40f4f31468d46c7c37a24ddaafb7e69fc4c4db Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Sat, 4 Oct 2014 21:48:49 +0100 Subject: [PATCH 11/18] ITS#7961 fix txn init More fallout from 4d02c741b120786df1b87ee9ed49c1d3f9bc7522 --- libraries/liblmdb/mdb.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c index 63445ce7af..524dde96d6 100644 --- a/libraries/liblmdb/mdb.c +++ b/libraries/liblmdb/mdb.c @@ -2472,11 +2472,10 @@ mdb_txn_renew0(MDB_txn *txn) uint16_t x; int rc, new_notls = 0; - /* Setup db info */ - txn->mt_numdbs = env->me_numdbs; - txn->mt_dbxs = env->me_dbxs; /* mostly static anyway */ - if (txn->mt_flags & MDB_TXN_RDONLY) { + /* Setup db info */ + txn->mt_numdbs = env->me_numdbs; + txn->mt_dbxs = env->me_dbxs; /* mostly static anyway */ if (!ti) { meta = env->me_metas[ mdb_env_pick_meta(env) ]; txn->mt_txnid = meta->mm_txnid; @@ -2536,6 +2535,8 @@ mdb_txn_renew0(MDB_txn *txn) meta = env->me_metas[ mdb_env_pick_meta(env) ]; txn->mt_txnid = meta->mm_txnid; } + /* Setup db info */ + txn->mt_numdbs = env->me_numdbs; txn->mt_txnid++; #if MDB_DEBUG if (txn->mt_txnid == mdb_debug_start) @@ -2622,18 +2623,17 @@ mdb_txn_begin(MDB_env *env, MDB_txn *parent, unsigned int flags, MDB_txn **ret) } tsize = sizeof(MDB_ntxn); } - size = tsize + env->me_maxdbs * (sizeof(MDB_db)+1); + size = tsize; if (!(flags & MDB_RDONLY)) { if (!parent) { - txn = env->me_txn0; + txn = env->me_txn0; /* just reuse preallocated write txn */ txn->mt_flags = 0; goto ok; } + /* child txns use own copy of cursors */ size += env->me_maxdbs * sizeof(MDB_cursor *); - /* child txns use parent's dbiseqs */ - if (!parent) - size += env->me_maxdbs * sizeof(unsigned int); } + size += env->me_maxdbs * (sizeof(MDB_db)+1); if ((txn = calloc(1, size)) == NULL) { DPRINTF(("calloc: %s", strerror(errno))); @@ -4530,6 +4530,7 @@ mdb_env_open(MDB_env *env, const char *path, unsigned int flags, mdb_mode_t mode txn->mt_dbiseqs = (unsigned int *)(txn->mt_cursors + env->me_maxdbs); txn->mt_dbflags = (unsigned char *)(txn->mt_dbiseqs + env->me_maxdbs); txn->mt_env = env; + txn->mt_dbxs = env->me_dbxs; env->me_txn0 = txn; } else { rc = ENOMEM; From 3ce002fd13664ace18770565b3078ebfc3923a6b Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Wed, 8 Oct 2014 19:25:27 +0100 Subject: [PATCH 12/18] ITS#7959 fix prev commit fstat returns -1, not an errno. Move code into its own function for reuse. --- libraries/liblmdb/mdb.c | 46 ++++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c index 524dde96d6..2e9e3dc96e 100644 --- a/libraries/liblmdb/mdb.c +++ b/libraries/liblmdb/mdb.c @@ -3828,6 +3828,27 @@ mdb_env_get_maxreaders(MDB_env *env, unsigned int *readers) return MDB_SUCCESS; } +static int ESECT +mdb_fsize(HANDLE fd, size_t *size) +{ +#ifdef WIN32 + LARGE_INTEGER fsize; + + if (!GetFileSizeEx(fd, &fsize)) + return ErrCode(); + + *size = fsize.QuadPart; +#else + struct stat st; + + if (fstat(fd, &st)) + return ErrCode(); + + *size = st.st_size; +#endif + return MDB_SUCCESS; +} + /** Further setup required for opening an LMDB environment */ static int ESECT @@ -8690,30 +8711,13 @@ mdb_env_copyfd0(MDB_env *env, HANDLE fd) goto leave; w2 = txn->mt_next_pgno * env->me_psize; -#ifdef WIN32 { - LARGE_INTEGER fsize; - - if (!GetFileSizeEx(env->me_fd, &fsize)) { - rc = ErrCode(); + size_t fsize = 0; + if ((rc = mdb_fsize(env->me_fd, &fsize))) goto leave; - } - - if (w2 > fsize.QuadPart) - w2 = fsize.QuadPart; + if (w2 > fsize) + w2 = fsize; } -#else - { - struct stat st; - - if ((rc = fstat(env->me_fd, &st))) { - goto leave; - } - - if (w2 > (size_t)st.st_size) - w2 = st.st_size; - } -#endif wsize = w2 - wsize; while (wsize > 0) { if (wsize > MAX_WRITE) From 17bf75b12eb94d9903cd62329048b146d5313bad Mon Sep 17 00:00:00 2001 From: Hallvard Furuseth Date: Sat, 22 Nov 2014 22:56:31 +0100 Subject: [PATCH 13/18] ITS#7961,#7987 Re-fix txn init. More fallout from 4d02c741b120786df1b87ee9ed49c1d3f9bc7522: Don't modify another thread's write txn. Reinit me_txn0 fully. --- libraries/liblmdb/mdb.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c index 2e9e3dc96e..d4edda47bc 100644 --- a/libraries/liblmdb/mdb.c +++ b/libraries/liblmdb/mdb.c @@ -2542,6 +2542,10 @@ mdb_txn_renew0(MDB_txn *txn) if (txn->mt_txnid == mdb_debug_start) mdb_debug = 1; #endif + txn->mt_flags = 0; + txn->mt_child = NULL; + txn->mt_loose_pgs = NULL; + txn->mt_loose_count = 0; txn->mt_dirty_room = MDB_IDL_UM_MAX; txn->mt_u.dirty_list = env->me_dirty_list; txn->mt_u.dirty_list[0].mid = 0; @@ -2627,7 +2631,6 @@ mdb_txn_begin(MDB_env *env, MDB_txn *parent, unsigned int flags, MDB_txn **ret) if (!(flags & MDB_RDONLY)) { if (!parent) { txn = env->me_txn0; /* just reuse preallocated write txn */ - txn->mt_flags = 0; goto ok; } /* child txns use own copy of cursors */ @@ -2778,6 +2781,8 @@ mdb_txn_reset0(MDB_txn *txn, const char *act) env->me_pghead = NULL; env->me_pglast = 0; + mdb_cursors_close(txn, 0); + if (!(env->me_flags & MDB_WRITEMAP)) { mdb_dlist_free(txn); } @@ -2790,19 +2795,15 @@ mdb_txn_reset0(MDB_txn *txn, const char *act) /* The writer mutex was locked in mdb_txn_begin. */ if (env->me_txns) UNLOCK_MUTEX_W(env); - } - - mdb_cursors_close(txn, 0); - - mdb_midl_free(pghead); - - if (txn->mt_parent) { + } else { txn->mt_parent->mt_child = NULL; env->me_pgstate = ((MDB_ntxn *)txn)->mnt_pgstate; mdb_midl_free(txn->mt_free_pgs); mdb_midl_free(txn->mt_spill_pgs); free(txn->mt_u.dirty_list); } + + mdb_midl_free(pghead); } } From 3aa7537adc33b4b7ac36e1137aae18f840765153 Mon Sep 17 00:00:00 2001 From: Hallvard Furuseth Date: Mon, 1 Dec 2014 08:59:29 +0100 Subject: [PATCH 14/18] Simplify recent changes a bit. --- libraries/liblmdb/mdb.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c index d4edda47bc..82c23dd0a5 100644 --- a/libraries/liblmdb/mdb.c +++ b/libraries/liblmdb/mdb.c @@ -2778,11 +2778,8 @@ mdb_txn_reset0(MDB_txn *txn, const char *act) txn->mt_dbxs = NULL; /* mark txn as reset */ } else { pgno_t *pghead = env->me_pghead; - env->me_pghead = NULL; - env->me_pglast = 0; mdb_cursors_close(txn, 0); - if (!(env->me_flags & MDB_WRITEMAP)) { mdb_dlist_free(txn); } @@ -2790,6 +2787,9 @@ mdb_txn_reset0(MDB_txn *txn, const char *act) if (!txn->mt_parent) { if (mdb_midl_shrink(&txn->mt_free_pgs)) env->me_free_pgs = txn->mt_free_pgs; + /* me_pgstate: */ + env->me_pghead = NULL; + env->me_pglast = 0; env->me_txn = NULL; /* The writer mutex was locked in mdb_txn_begin. */ From 5bf495abdc3cfd519053abc7c1143d11e8ce5f0d Mon Sep 17 00:00:00 2001 From: Hallvard Furuseth Date: Mon, 1 Dec 2014 08:59:29 +0100 Subject: [PATCH 15/18] Fix comments --- libraries/liblmdb/mdb.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c index 82c23dd0a5..e0c854c60a 100644 --- a/libraries/liblmdb/mdb.c +++ b/libraries/liblmdb/mdb.c @@ -898,7 +898,7 @@ typedef struct MDB_meta { /** Stamp identifying this as an LMDB file. It must be set * to #MDB_MAGIC. */ uint32_t mm_magic; - /** Version number of this lock file. Must be set to #MDB_DATA_VERSION. */ + /** Version number of this file. Must be set to #MDB_DATA_VERSION. */ uint32_t mm_version; void *mm_address; /**< address for fixed mapping */ size_t mm_mapsize; /**< size of mmap region */ @@ -4048,7 +4048,7 @@ mdb_env_share_locks(MDB_env *env, int *excl) return rc; } -/** Try to get exlusive lock, otherwise shared. +/** Try to get exclusive lock, otherwise shared. * Maintain *excl = -1: no/unknown lock, 0: shared, 1: exclusive. */ static int ESECT @@ -4189,7 +4189,6 @@ mdb_hash_enc(MDB_val *val, char *encbuf) * @param[in] env The LMDB environment. * @param[in] lpath The pathname of the file used for the lock region. * @param[in] mode The Unix permissions for the file, if we create it. - * @param[out] excl Resulting file lock type: -1 none, 0 shared, 1 exclusive * @param[in,out] excl In -1, out lock type: -1 none, 0 shared, 1 exclusive * @return 0 on success, non-zero on failure. */ From 8704eff5917ed1f8025571bb85219d6e0b7b70fb Mon Sep 17 00:00:00 2001 From: Hallvard Furuseth Date: Mon, 1 Dec 2014 08:59:29 +0100 Subject: [PATCH 16/18] mdb_strerror: Silence warning @ Windows --- libraries/liblmdb/mdb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c index e0c854c60a..efb5689ca1 100644 --- a/libraries/liblmdb/mdb.c +++ b/libraries/liblmdb/mdb.c @@ -1316,7 +1316,7 @@ mdb_strerror(int err) buf[0] = 0; FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, err, 0, ptr, sizeof(buf), pad); + NULL, err, 0, ptr, sizeof(buf), (va_list *)pad); return ptr; #else return strerror(err); From f284c3232de0f9281a552b5e12a6d17af17f078d Mon Sep 17 00:00:00 2001 From: Hallvard Furuseth Date: Wed, 3 Dec 2014 12:27:53 +0100 Subject: [PATCH 17/18] Fix WIN32 -> _WIN32 --- libraries/liblmdb/mdb.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c index efb5689ca1..8d73105ba0 100644 --- a/libraries/liblmdb/mdb.c +++ b/libraries/liblmdb/mdb.c @@ -3832,7 +3832,7 @@ mdb_env_get_maxreaders(MDB_env *env, unsigned int *readers) static int ESECT mdb_fsize(HANDLE fd, size_t *size) { -#ifdef WIN32 +#ifdef _WIN32 LARGE_INTEGER fsize; if (!GetFileSizeEx(fd, &fsize)) @@ -3998,7 +3998,7 @@ PIMAGE_TLS_CALLBACK mdb_tls_cbp __attribute__((section (".CRT$XLB"))) = mdb_tls_ extern const PIMAGE_TLS_CALLBACK mdb_tls_cbp; const PIMAGE_TLS_CALLBACK mdb_tls_cbp = mdb_tls_callback; #pragma const_seg() -#else /* WIN32 */ +#else /* _WIN32 */ #pragma comment(linker, "/INCLUDE:__tls_used") #pragma comment(linker, "/INCLUDE:_mdb_tls_cbp") #pragma data_seg(".CRT$XLB") From 196e07ca587874c602a1ae358d97c7b6b765c94e Mon Sep 17 00:00:00 2001 From: Leo Yuriev Date: Fri, 5 Dec 2014 19:30:31 +0000 Subject: [PATCH 18/18] ITS#7987 fix excessive space for single write txn --- libraries/liblmdb/mdb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c index 8d73105ba0..0867af7f52 100644 --- a/libraries/liblmdb/mdb.c +++ b/libraries/liblmdb/mdb.c @@ -4543,7 +4543,7 @@ mdb_env_open(MDB_env *env, const char *path, unsigned int flags, mdb_mode_t mode if (!(flags & MDB_RDONLY)) { MDB_txn *txn; int tsize = sizeof(MDB_txn), size = tsize + env->me_maxdbs * - (sizeof(MDB_db)+sizeof(MDB_cursor)+sizeof(unsigned int)+1); + (sizeof(MDB_db)+sizeof(MDB_cursor *)+sizeof(unsigned int)+1); txn = calloc(1, size); if (txn) { txn->mt_dbs = (MDB_db *)((char *)txn + tsize);