Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package lmdb for openSUSE:Factory checked in 
at 2023-03-22 22:28:58
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/lmdb (Old)
 and      /work/SRC/openSUSE:Factory/.lmdb.new.31432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "lmdb"

Wed Mar 22 22:28:58 2023 rev:20 rq:1073055 version:0.9.30

Changes:
--------
--- /work/SRC/openSUSE:Factory/lmdb/lmdb.changes        2023-02-07 
18:47:39.586672041 +0100
+++ /work/SRC/openSUSE:Factory/.lmdb.new.31432/lmdb.changes     2023-03-22 
22:28:59.765696304 +0100
@@ -1,0 +2,12 @@
+Sun Mar 19 09:00:43 UTC 2023 - Dirk Müller <[email protected]>
+
+- update to 0.9.30:
+  * LMDB page_split: key threshold depends on page
+    size
+  * avoid gcc optimization bug on sparc64 linux
+  * - Mark infrequently used functions as cold
+  * clear C_EOF on cursor with MDB_FIRST_DUP
+  * Use sys/cachectl.h rather than asm/cachectl.h on
+    mips
+
+-------------------------------------------------------------------

Old:
----
  openldap-LMDB_0.9.29.tar.gz

New:
----
  openldap-LMDB_0.9.30.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ lmdb.spec ++++++
--- /var/tmp/diff_new_pack.8l92My/_old  2023-03-22 22:29:00.489699947 +0100
+++ /var/tmp/diff_new_pack.8l92My/_new  2023-03-22 22:29:00.497699988 +0100
@@ -20,8 +20,8 @@
 Summary:        Lightning Memory-Mapped Database Manager
 License:        OLDAP-2.8
 Group:          Productivity/Databases/Tools
-%define lname liblmdb-0_9_29
-Version:        0.9.29
+%define lname liblmdb-0_9_30
+Version:        0.9.30
 Release:        0
 URL:            https://symas.com/mdb/
 Source:         
https://git.openldap.org/openldap/openldap/-/archive/LMDB_%{version}/openldap-LMDB_%{version}.tar.gz

++++++ baselibs.conf ++++++
--- /var/tmp/diff_new_pack.8l92My/_old  2023-03-22 22:29:00.537700189 +0100
+++ /var/tmp/diff_new_pack.8l92My/_new  2023-03-22 22:29:00.541700209 +0100
@@ -1,2 +1,2 @@
-liblmdb-0_9_29
+liblmdb-0_9_30
 

++++++ openldap-LMDB_0.9.29.tar.gz -> openldap-LMDB_0.9.30.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openldap-LMDB_0.9.29/libraries/liblmdb/CHANGES 
new/openldap-LMDB_0.9.30/libraries/liblmdb/CHANGES
--- old/openldap-LMDB_0.9.29/libraries/liblmdb/CHANGES  2021-03-16 
17:41:19.000000000 +0100
+++ new/openldap-LMDB_0.9.30/libraries/liblmdb/CHANGES  2023-02-08 
19:41:37.000000000 +0100
@@ -1,5 +1,12 @@
 LMDB 0.9 Change Log
 
+LMDB 0.9.30 Release (2023/02/08)
+       ITS#9806 - LMDB page_split: key threshold depends on page size
+       ITS#9916 - avoid gcc optimization bug on sparc64 linux
+       ITS#9919 - Mark infrequently used functions as cold
+       ITS#9723 - clear C_EOF on cursor with MDB_FIRST_DUP
+       ITS#9030 - Use sys/cachectl.h rather than asm/cachectl.h on mips
+
 LMDB 0.9.29 Release (2021/03/16)
        ITS#9461 refix ITS#9376
        ITS#9500 fix regression from ITS#8662
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openldap-LMDB_0.9.29/libraries/liblmdb/lmdb.h 
new/openldap-LMDB_0.9.30/libraries/liblmdb/lmdb.h
--- old/openldap-LMDB_0.9.29/libraries/liblmdb/lmdb.h   2021-03-16 
17:41:19.000000000 +0100
+++ new/openldap-LMDB_0.9.30/libraries/liblmdb/lmdb.h   2023-02-08 
19:41:37.000000000 +0100
@@ -200,7 +200,7 @@
 /** Library minor version */
 #define MDB_VERSION_MINOR      9
 /** Library patch version */
-#define MDB_VERSION_PATCH      29
+#define MDB_VERSION_PATCH      30
 
 /** Combine args a,b,c into a single integer for easy version comparisons */
 #define MDB_VERINT(a,b,c)      (((a) << 24) | ((b) << 16) | (c))
@@ -210,7 +210,7 @@
        MDB_VERINT(MDB_VERSION_MAJOR,MDB_VERSION_MINOR,MDB_VERSION_PATCH)
 
 /** The release date of this library version */
-#define MDB_VERSION_DATE       "March 16, 2021"
+#define MDB_VERSION_DATE       "February 8, 2023"
 
 /** A stringifier for the version info */
 #define MDB_VERSTR(a,b,c,d)    "LMDB " #a "." #b "." #c ": (" d ")"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openldap-LMDB_0.9.29/libraries/liblmdb/mdb.c 
new/openldap-LMDB_0.9.30/libraries/liblmdb/mdb.c
--- old/openldap-LMDB_0.9.29/libraries/liblmdb/mdb.c    2021-03-16 
17:41:19.000000000 +0100
+++ new/openldap-LMDB_0.9.30/libraries/liblmdb/mdb.c    2023-02-08 
19:41:37.000000000 +0100
@@ -77,8 +77,7 @@
 
 #if defined(__mips) && defined(__linux)
 /* MIPS has cache coherency issues, requires explicit cache control */
-#include <asm/cachectl.h>
-extern int cacheflush(char *addr, int nbytes, int cache);
+#include <sys/cachectl.h>
 #define CACHEFLUSH(addr, bytes, cache) cacheflush(addr, bytes, cache)
 #else
 #define CACHEFLUSH(addr, bytes, cache)
@@ -200,15 +199,21 @@
 # error "Two's complement, reasonably sized integer types, please"
 #endif
 
-#ifdef __GNUC__
-/** Put infrequently used env functions in separate section */
-# ifdef __APPLE__
-#  define      ESECT   __attribute__ ((section("__TEXT,text_env")))
+#if (((__clang_major__ << 8) | __clang_minor__) >= 0x0302) || (((__GNUC__ << 
8) | __GNUC_MINOR__) >= 0x0403)
+/** Mark infrequently used env functions as cold. This puts them in a separate
+ *  section, and optimizes them for size */
+#define ESECT __attribute__ ((cold))
+#else
+/* On older compilers, use a separate section */
+# ifdef __GNUC__
+#  ifdef __APPLE__
+#   define      ESECT   __attribute__ ((section("__TEXT,text_env")))
+#  else
+#   define      ESECT   __attribute__ ((section("text_env")))
+#  endif
 # else
-#  define      ESECT   __attribute__ ((section("text_env")))
+#  define ESECT
 # endif
-#else
-#define ESECT
 #endif
 
 #ifdef _WIN32
@@ -833,9 +838,26 @@
                } pb;
                uint32_t        pb_pages;       /**< number of overflow pages */
        } mp_pb;
-       indx_t          mp_ptrs[1];             /**< dynamic size */
+       indx_t          mp_ptrs[0];             /**< dynamic size */
 } MDB_page;
 
+/** Alternate page header, for 2-byte aligned access */
+typedef struct MDB_page2 {
+       uint16_t        mp2_p[sizeof(pgno_t)/2];
+       uint16_t        mp2_pad;
+       uint16_t        mp2_flags;
+       indx_t          mp2_lower;
+       indx_t          mp2_upper;
+       indx_t          mp2_ptrs[0];
+} MDB_page2;
+
+#define MP_PGNO(p)     (((MDB_page2 *)(void *)(p))->mp2_p)
+#define MP_PAD(p)      (((MDB_page2 *)(void *)(p))->mp2_pad)
+#define MP_FLAGS(p)    (((MDB_page2 *)(void *)(p))->mp2_flags)
+#define MP_LOWER(p)    (((MDB_page2 *)(void *)(p))->mp2_lower)
+#define MP_UPPER(p)    (((MDB_page2 *)(void *)(p))->mp2_upper)
+#define MP_PTRS(p)     (((MDB_page2 *)(void *)(p))->mp2_ptrs)
+
        /** Size of the page header, excluding dynamic data at the end */
 #define PAGEHDRSZ       ((unsigned) offsetof(MDB_page, mp_ptrs))
 
@@ -846,10 +868,10 @@
 #define        PAGEBASE        ((MDB_DEVEL) ? PAGEHDRSZ : 0)
 
        /** Number of nodes on a page */
-#define NUMKEYS(p)      (((p)->mp_lower - (PAGEHDRSZ-PAGEBASE)) >> 1)
+#define NUMKEYS(p)      ((MP_LOWER(p) - (PAGEHDRSZ-PAGEBASE)) >> 1)
 
        /** The amount of space remaining in the page */
-#define SIZELEFT(p)     (indx_t)((p)->mp_upper - (p)->mp_lower)
+#define SIZELEFT(p)     (indx_t)(MP_UPPER(p) - MP_LOWER(p))
 
        /** The percentage of space used in the page, in tenths of a percent. */
 #define PAGEFILL(env, p) (1000L * ((env)->me_psize - PAGEHDRSZ - SIZELEFT(p)) 
/ \
@@ -860,15 +882,15 @@
 #define FILL_THRESHOLD  250
 
        /** Test if a page is a leaf page */
-#define IS_LEAF(p)      F_ISSET((p)->mp_flags, P_LEAF)
+#define IS_LEAF(p)      F_ISSET(MP_FLAGS(p), P_LEAF)
        /** Test if a page is a LEAF2 page */
-#define IS_LEAF2(p)     F_ISSET((p)->mp_flags, P_LEAF2)
+#define IS_LEAF2(p)     F_ISSET(MP_FLAGS(p), P_LEAF2)
        /** Test if a page is a branch page */
-#define IS_BRANCH(p)    F_ISSET((p)->mp_flags, P_BRANCH)
+#define IS_BRANCH(p)    F_ISSET(MP_FLAGS(p), P_BRANCH)
        /** Test if a page is an overflow page */
-#define IS_OVERFLOW(p)  F_ISSET((p)->mp_flags, P_OVERFLOW)
+#define IS_OVERFLOW(p)  F_ISSET(MP_FLAGS(p), P_OVERFLOW)
        /** Test if a page is a sub page */
-#define IS_SUBP(p)      F_ISSET((p)->mp_flags, P_SUBP)
+#define IS_SUBP(p)      F_ISSET(MP_FLAGS(p), P_SUBP)
 
        /** The number of overflow pages needed to store the given size. */
 #define OVPAGES(size, psize)   ((PAGEHDRSZ-1 + (size)) / (psize) + 1)
@@ -936,7 +958,7 @@
 #define LEAFSIZE(k, d)  (NODESIZE + (k)->mv_size + (d)->mv_size)
 
        /** Address of node \b i in page \b p */
-#define NODEPTR(p, i)   ((MDB_node *)((char *)(p) + (p)->mp_ptrs[i] + 
PAGEBASE))
+#define NODEPTR(p, i)   ((MDB_node *)((char *)(p) + MP_PTRS(p)[i] + PAGEBASE))
 
        /** Address of the key for the node */
 #define NODEKEY(node)   (void *)((node)->mn_data)
@@ -964,6 +986,8 @@
        /** Copy a page number from src to dst */
 #ifdef MISALIGNED_OK
 #define COPY_PGNO(dst,src)     dst = src
+#undef MP_PGNO
+#define MP_PGNO(p)     ((p)->mp_pgno)
 #else
 #if SIZE_MAX > 4294967295UL
 #define COPY_PGNO(dst,src)     do { \
@@ -1517,6 +1541,8 @@
                NULL, err, 0, ptr, MSGSIZE, (va_list *)buf+MSGSIZE);
        return ptr;
 #else
+       if (err < 0)
+               return "Invalid error code";
        return strerror(err);
 #endif
 }
@@ -1554,7 +1580,7 @@
 mdb_dbg_pgno(MDB_page *mp)
 {
        pgno_t ret;
-       COPY_PGNO(ret, mp->mp_pgno);
+       COPY_PGNO(ret, MP_PGNO(mp));
        return ret;
 }
 
@@ -1601,13 +1627,13 @@
 mdb_page_list(MDB_page *mp)
 {
        pgno_t pgno = mdb_dbg_pgno(mp);
-       const char *type, *state = (mp->mp_flags & P_DIRTY) ? ", dirty" : "";
+       const char *type, *state = (MP_FLAGS(mp) & P_DIRTY) ? ", dirty" : "";
        MDB_node *node;
        unsigned int i, nkeys, nsize, total = 0;
        MDB_val key;
        DKBUF;
 
-       switch (mp->mp_flags & 
(P_BRANCH|P_LEAF|P_LEAF2|P_META|P_OVERFLOW|P_SUBP)) {
+       switch (MP_FLAGS(mp) & 
(P_BRANCH|P_LEAF|P_LEAF2|P_META|P_OVERFLOW|P_SUBP)) {
        case P_BRANCH:              type = "Branch page";               break;
        case P_LEAF:                type = "Leaf page";                 break;
        case P_LEAF|P_SUBP:         type = "Sub-page";                  break;
@@ -1622,7 +1648,7 @@
                        pgno, ((MDB_meta *)METADATA(mp))->mm_txnid);
                return;
        default:
-               fprintf(stderr, "Bad page %"Z"u flags 0x%X\n", pgno, 
mp->mp_flags);
+               fprintf(stderr, "Bad page %"Z"u flags 0x%X\n", pgno, 
MP_FLAGS(mp));
                return;
        }
 
@@ -1658,7 +1684,7 @@
                total = EVEN(total);
        }
        fprintf(stderr, "Total: header %d + contents %d + unused %d\n",
-               IS_LEAF2(mp) ? PAGEHDRSZ : PAGEBASE + mp->mp_lower, total, 
SIZELEFT(mp));
+               IS_LEAF2(mp) ? PAGEHDRSZ : PAGEBASE + MP_LOWER(mp), total, 
SIZELEFT(mp));
 }
 
 void
@@ -2418,7 +2444,7 @@
        pgno_t  pgno;
        int rc;
 
-       if (!F_ISSET(mp->mp_flags, P_DIRTY)) {
+       if (!F_ISSET(MP_FLAGS(mp), P_DIRTY)) {
                if (txn->mt_flags & MDB_TXN_SPILLS) {
                        np = NULL;
                        rc = mdb_page_unspill(txn, mp, &np);
@@ -6061,7 +6087,7 @@
                        mc->mc_ki[mc->mc_top] = 0;
                        return MDB_NOTFOUND;
                }
-               if (mp->mp_flags & P_LEAF2) {
+               if (MP_FLAGS(mp) & P_LEAF2) {
                        nodekey.mv_size = mc->mc_db->md_pad;
                        nodekey.mv_data = LEAF2KEY(mp, 0, nodekey.mv_size);
                } else {
@@ -6082,7 +6108,7 @@
                        unsigned int i;
                        unsigned int nkeys = NUMKEYS(mp);
                        if (nkeys > 1) {
-                               if (mp->mp_flags & P_LEAF2) {
+                               if (MP_FLAGS(mp) & P_LEAF2) {
                                        nodekey.mv_data = LEAF2KEY(mp,
                                                 nkeys-1, nodekey.mv_size);
                                } else {
@@ -6100,7 +6126,7 @@
                                if (rc < 0) {
                                        if (mc->mc_ki[mc->mc_top] < 
NUMKEYS(mp)) {
                                                /* This is definitely the right 
page, skip search_page */
-                                               if (mp->mp_flags & P_LEAF2) {
+                                               if (MP_FLAGS(mp) & P_LEAF2) {
                                                        nodekey.mv_data = 
LEAF2KEY(mp,
                                                                 
mc->mc_ki[mc->mc_top], nodekey.mv_size);
                                                } else {
@@ -6477,6 +6503,7 @@
                        rc = MDB_NOTFOUND;
                        break;
                }
+               mc->mc_flags &= ~C_EOF;
                {
                        MDB_node *leaf = NODEPTR(mc->mc_pg[mc->mc_top], 
mc->mc_ki[mc->mc_top]);
                        if (!F_ISSET(leaf->mn_flags, F_DUPDATA)) {
@@ -6663,7 +6690,7 @@
                *mc->mc_dbflag |= DB_DIRTY;
                if ((mc->mc_db->md_flags & (MDB_DUPSORT|MDB_DUPFIXED))
                        == MDB_DUPFIXED)
-                       np->mp_flags |= P_LEAF2;
+                       MP_FLAGS(np) |= P_LEAF2;
                mc->mc_flags |= C_INITIALIZED;
        } else {
                /* make sure all cursor pages are writable */
@@ -6685,7 +6712,7 @@
                        fp_flags = P_LEAF|P_DIRTY;
                        fp = env->me_pbuf;
                        fp->mp_pad = data->mv_size; /* used if MDB_DUPFIXED */
-                       fp->mp_lower = fp->mp_upper = (PAGEHDRSZ-PAGEBASE);
+                       MP_LOWER(fp) = MP_UPPER(fp) = (PAGEHDRSZ-PAGEBASE);
                        olddata.mv_size = PAGEHDRSZ;
                        goto prep_subDB;
                }
@@ -6761,18 +6788,18 @@
                                dkey.mv_data = memcpy(fp+1, olddata.mv_data, 
olddata.mv_size);
 
                                /* Make sub-page header for the dup items, with 
dummy body */
-                               fp->mp_flags = P_LEAF|P_DIRTY|P_SUBP;
-                               fp->mp_lower = (PAGEHDRSZ-PAGEBASE);
+                               MP_FLAGS(fp) = P_LEAF|P_DIRTY|P_SUBP;
+                               MP_LOWER(fp) = (PAGEHDRSZ-PAGEBASE);
                                xdata.mv_size = PAGEHDRSZ + dkey.mv_size + 
data->mv_size;
                                if (mc->mc_db->md_flags & MDB_DUPFIXED) {
-                                       fp->mp_flags |= P_LEAF2;
+                                       MP_FLAGS(fp) |= P_LEAF2;
                                        fp->mp_pad = data->mv_size;
                                        xdata.mv_size += 2 * data->mv_size;     
/* leave space for 2 more */
                                } else {
                                        xdata.mv_size += 2 * (sizeof(indx_t) + 
NODESIZE) +
                                                (dkey.mv_size & 1) + 
(data->mv_size & 1);
                                }
-                               fp->mp_upper = xdata.mv_size - PAGEBASE;
+                               MP_UPPER(fp) = xdata.mv_size - PAGEBASE;
                                olddata.mv_size = xdata.mv_size; /* pretend 
olddata is fp */
                        } else if (leaf->mn_flags & F_SUBDATA) {
                                /* Data is on sub-DB, just store it */
@@ -6795,8 +6822,8 @@
                                        }
                                        /* FALLTHRU */ /* Big enough 
MDB_DUPFIXED sub-page */
                                case MDB_CURRENT:
-                                       fp->mp_flags |= P_DIRTY;
-                                       COPY_PGNO(fp->mp_pgno, mp->mp_pgno);
+                                       MP_FLAGS(fp) |= P_DIRTY;
+                                       COPY_PGNO(MP_PGNO(fp), MP_PGNO(mp));
                                        mc->mc_xcursor->mx_cursor.mc_pg[0] = fp;
                                        flags |= F_DUPDATA;
                                        goto put_sub;
@@ -6804,7 +6831,7 @@
                                xdata.mv_size = olddata.mv_size + offset;
                        }
 
-                       fp_flags = fp->mp_flags;
+                       fp_flags = MP_FLAGS(fp);
                        if (NODESIZE + NODEKSZ(leaf) + xdata.mv_size > 
env->me_nodemax) {
                                        /* Too big for a sub-page, convert to 
sub-DB */
                                        fp_flags &= ~P_SUBP;
@@ -6834,16 +6861,16 @@
                                        sub_root = mp;
                        }
                        if (mp != fp) {
-                               mp->mp_flags = fp_flags | P_DIRTY;
-                               mp->mp_pad   = fp->mp_pad;
-                               mp->mp_lower = fp->mp_lower;
-                               mp->mp_upper = fp->mp_upper + offset;
+                               MP_FLAGS(mp) = fp_flags | P_DIRTY;
+                               MP_PAD(mp)   = MP_PAD(fp);
+                               MP_LOWER(mp) = MP_LOWER(fp);
+                               MP_UPPER(mp) = MP_UPPER(fp) + offset;
                                if (fp_flags & P_LEAF2) {
                                        memcpy(METADATA(mp), METADATA(fp), 
NUMKEYS(fp) * fp->mp_pad);
                                } else {
-                                       memcpy((char *)mp + mp->mp_upper + 
PAGEBASE, (char *)fp + fp->mp_upper + PAGEBASE,
-                                               olddata.mv_size - fp->mp_upper 
- PAGEBASE);
-                                       memcpy((char *)(&mp->mp_ptrs), (char 
*)(&fp->mp_ptrs), NUMKEYS(fp) * sizeof(mp->mp_ptrs[0]));
+                                       memcpy((char *)mp + MP_UPPER(mp) + 
PAGEBASE, (char *)fp + MP_UPPER(fp) + PAGEBASE,
+                                               olddata.mv_size - MP_UPPER(fp) 
- PAGEBASE);
+                                       memcpy((char *)MP_PTRS(mp), (char 
*)MP_PTRS(fp), NUMKEYS(fp) * sizeof(mp->mp_ptrs[0]));
                                        for (i=0; i<NUMKEYS(fp); i++)
                                                mp->mp_ptrs[i] += offset;
                                }
@@ -6908,7 +6935,7 @@
                                                 * Copy end of page, adjusting 
alignment so
                                                 * compiler may copy words 
instead of bytes.
                                                 */
-                                               off = (PAGEHDRSZ + 
data->mv_size) & -sizeof(size_t);
+                                               off = (PAGEHDRSZ + 
data->mv_size) & -(int)sizeof(size_t);
                                                memcpy((size_t *)((char *)np + 
off),
                                                        (size_t *)((char *)omp 
+ off), sz - off);
                                                sz = PAGEHDRSZ;
@@ -7291,7 +7318,7 @@
        void            *ndata;
        DKBUF;
 
-       mdb_cassert(mc, mp->mp_upper >= mp->mp_lower);
+       mdb_cassert(mc, MP_UPPER(mp) >= MP_LOWER(mp));
 
        DPRINTF(("add to %s %spage %"Z"u index %i, data size %"Z"u key size 
%"Z"u [%s]",
            IS_LEAF(mp) ? "leaf" : "branch",
@@ -7310,8 +7337,8 @@
                memcpy(ptr, key->mv_data, ksize);
 
                /* Just using these for counting */
-               mp->mp_lower += sizeof(indx_t);
-               mp->mp_upper -= ksize - sizeof(indx_t);
+               MP_LOWER(mp) += sizeof(indx_t);
+               MP_UPPER(mp) -= ksize - sizeof(indx_t);
                return MDB_SUCCESS;
        }
 
@@ -7348,14 +7375,14 @@
 update:
        /* Move higher pointers up one slot. */
        for (i = NUMKEYS(mp); i > indx; i--)
-               mp->mp_ptrs[i] = mp->mp_ptrs[i - 1];
+               MP_PTRS(mp)[i] = MP_PTRS(mp)[i - 1];
 
        /* Adjust free space offsets. */
-       ofs = mp->mp_upper - node_size;
-       mdb_cassert(mc, ofs >= mp->mp_lower + sizeof(indx_t));
-       mp->mp_ptrs[indx] = ofs;
-       mp->mp_upper = ofs;
-       mp->mp_lower += sizeof(indx_t);
+       ofs = MP_UPPER(mp) - node_size;
+       mdb_cassert(mc, ofs >= MP_LOWER(mp) + sizeof(indx_t));
+       MP_PTRS(mp)[indx] = ofs;
+       MP_UPPER(mp) = ofs;
+       MP_LOWER(mp) += sizeof(indx_t);
 
        /* Write the node data. */
        node = NODEPTR(mp, indx);
@@ -7393,7 +7420,7 @@
 full:
        DPRINTF(("not enough room in page %"Z"u, got %u ptrs",
                mdb_dbg_pgno(mp), NUMKEYS(mp)));
-       DPRINTF(("upper-lower = %u - %u = %"Z"d", 
mp->mp_upper,mp->mp_lower,room));
+       DPRINTF(("upper-lower = %u - %u = %"Z"d", 
MP_UPPER(mp),MP_LOWER(mp),room));
        DPRINTF(("node size = %"Z"u", node_size));
        mc->mc_txn->mt_flags |= MDB_TXN_ERROR;
        return MDB_PAGE_FULL;
@@ -7424,8 +7451,8 @@
                base = LEAF2KEY(mp, indx, ksize);
                if (x)
                        memmove(base, base + ksize, x * ksize);
-               mp->mp_lower -= sizeof(indx_t);
-               mp->mp_upper += ksize - sizeof(indx_t);
+               MP_LOWER(mp) -= sizeof(indx_t);
+               MP_UPPER(mp) += ksize - sizeof(indx_t);
                return;
        }
 
@@ -7439,21 +7466,21 @@
        }
        sz = EVEN(sz);
 
-       ptr = mp->mp_ptrs[indx];
+       ptr = MP_PTRS(mp)[indx];
        for (i = j = 0; i < numkeys; i++) {
                if (i != indx) {
-                       mp->mp_ptrs[j] = mp->mp_ptrs[i];
-                       if (mp->mp_ptrs[i] < ptr)
-                               mp->mp_ptrs[j] += sz;
+                       MP_PTRS(mp)[j] = MP_PTRS(mp)[i];
+                       if (MP_PTRS(mp)[i] < ptr)
+                               MP_PTRS(mp)[j] += sz;
                        j++;
                }
        }
 
-       base = (char *)mp + mp->mp_upper + PAGEBASE;
-       memmove(base + sz, base, ptr - mp->mp_upper);
+       base = (char *)mp + MP_UPPER(mp) + PAGEBASE;
+       memmove(base + sz, base, ptr - MP_UPPER(mp));
 
-       mp->mp_lower -= sizeof(indx_t);
-       mp->mp_upper += sz;
+       MP_LOWER(mp) -= sizeof(indx_t);
+       MP_UPPER(mp) += sz;
 }
 
 /** Compact the main page after deleting a node on a subpage.
@@ -7482,11 +7509,11 @@
        } else {
                xp = (MDB_page *)((char *)sp + delta); /* destination subpage */
                for (i = NUMKEYS(sp); --i >= 0; )
-                       xp->mp_ptrs[i] = sp->mp_ptrs[i] - delta;
+                       MP_PTRS(xp)[i] = MP_PTRS(sp)[i] - delta;
                len = PAGEHDRSZ;
        }
-       sp->mp_upper = sp->mp_lower;
-       COPY_PGNO(sp->mp_pgno, mp->mp_pgno);
+       MP_UPPER(sp) = MP_LOWER(sp);
+       COPY_PGNO(MP_PGNO(sp), mp->mp_pgno);
        SETDSZ(node, nsize);
 
        /* Shift <lower nodes...initial part of subpage> upward */
@@ -7557,7 +7584,7 @@
                mx->mx_db.md_leaf_pages = 1;
                mx->mx_db.md_overflow_pages = 0;
                mx->mx_db.md_entries = NUMKEYS(fp);
-               COPY_PGNO(mx->mx_db.md_root, fp->mp_pgno);
+               COPY_PGNO(mx->mx_db.md_root, MP_PGNO(fp));
                mx->mx_cursor.mc_snum = 1;
                mx->mx_cursor.mc_top = 0;
                mx->mx_cursor.mc_flags = C_INITIALIZED|C_SUB;
@@ -8729,9 +8756,13 @@
                                mc->mc_ki[mc->mc_top] = x;
                        }
                } else {
-                       int psize, nsize, k;
+                       int psize, nsize, k, keythresh;
+
                        /* Maximum free space in an empty page */
                        pmax = env->me_psize - PAGEHDRSZ;
+                       /* Threshold number of keys considered "small" */
+                       keythresh = env->me_psize >> 7;
+
                        if (IS_LEAF(mp))
                                nsize = mdb_leaf_size(env, newkey, newdata);
                        else
@@ -8772,7 +8803,7 @@
                         * the split so the new page is emptier than the old 
page.
                         * This yields better packing during sequential inserts.
                         */
-                       if (nkeys < 32 || nsize > pmax/16 || newindx >= nkeys) {
+                       if (nkeys < keythresh || nsize > pmax/16 || newindx >= 
nkeys) {
                                /* Find split point */
                                psize = 0;
                                if (newindx <= split_indx || newindx >= nkeys) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openldap-LMDB_0.9.29/libraries/liblmdb/mdb_dump.c 
new/openldap-LMDB_0.9.30/libraries/liblmdb/mdb_dump.c
--- old/openldap-LMDB_0.9.29/libraries/liblmdb/mdb_dump.c       2021-03-16 
17:41:19.000000000 +0100
+++ new/openldap-LMDB_0.9.30/libraries/liblmdb/mdb_dump.c       2023-02-08 
19:41:37.000000000 +0100
@@ -192,7 +192,7 @@
                        break;
                case 'l':
                        list = 1;
-                       /*FALLTHROUGH*/;
+                       /*FALLTHROUGH*/
                case 'a':
                        if (subname)
                                usage(prog);

Reply via email to