Import upstream fix for rhbz#1645114

This commit is contained in:
Jan Staněk 2018-11-05 13:01:55 +01:00
parent 3a485429e0
commit 8008a8dff3
No known key found for this signature in database
GPG Key ID: 2972F2037B243B6D
2 changed files with 65 additions and 1 deletions

View File

@ -0,0 +1,56 @@
From 1ffe472a080fcd3c7dab6e352848703ad7adbe14 Mon Sep 17 00:00:00 2001
From: Howard Chu <hyc@openldap.org>
Date: Fri, 22 Jun 2018 16:30:13 +0100
Subject: [PATCH] ITS#8756 remove loose pg from dirty list in freelist_save
---
libraries/liblmdb/mdb.c | 33 ++++++++++++++++++++++++++++++++-
1 file changed, 32 insertions(+), 1 deletion(-)
diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c
index a487e156..63872c92 100644
--- a/libraries/liblmdb/mdb.c
+++ b/libraries/liblmdb/mdb.c
@@ -3444,10 +3444,41 @@ mdb_freelist_save(MDB_txn *txn)
* we may be unable to return them to me_pghead.
*/
MDB_page *mp = txn->mt_loose_pgs;
+ MDB_ID2 *dl = txn->mt_u.dirty_list;
+ unsigned x;
if ((rc = mdb_midl_need(&txn->mt_free_pgs, txn->mt_loose_count)) != 0)
return rc;
- for (; mp; mp = NEXT_LOOSE_PAGE(mp))
+ for (; mp; mp = NEXT_LOOSE_PAGE(mp)) {
mdb_midl_xappend(txn->mt_free_pgs, mp->mp_pgno);
+ /* must also remove from dirty list */
+ if (txn->mt_flags & MDB_TXN_WRITEMAP) {
+ for (x=1; x<=dl[0].mid; x++)
+ if (dl[x].mid == mp->mp_pgno)
+ break;
+ mdb_tassert(txn, x <= dl[0].mid);
+ } else {
+ x = mdb_mid2l_search(dl, mp->mp_pgno);
+ mdb_tassert(txn, dl[x].mid == mp->mp_pgno);
+ }
+ dl[x].mptr = NULL;
+ mdb_dpage_free(env, mp);
+ }
+ {
+ /* squash freed slots out of the dirty list */
+ unsigned y;
+ for (y=1; dl[y].mptr && y <= dl[0].mid; y++);
+ if (y <= dl[0].mid) {
+ for(x=y, y++;;) {
+ while (!dl[y].mptr && y <= dl[0].mid) y++;
+ if (y > dl[0].mid) break;
+ dl[x++] = dl[y++];
+ }
+ dl[0].mid = x-1;
+ } else {
+ /* all slots freed */
+ dl[0].mid = 0;
+ }
+ }
txn->mt_loose_pgs = NULL;
txn->mt_loose_count = 0;
}

View File

@ -3,7 +3,7 @@
Name: lmdb Name: lmdb
Version: 0.9.22 Version: 0.9.22
Release: 3%{?dist} Release: 4%{?dist}
Summary: Memory-mapped key-value database Summary: Memory-mapped key-value database
License: OpenLDAP License: OpenLDAP
@ -14,6 +14,9 @@ Source1: lmdb.pc.in
Patch0: lmdb-make.patch Patch0: lmdb-make.patch
Patch1: lmdb-s390-check.patch Patch1: lmdb-s390-check.patch
# Upstream fix for rhbz#1645114
Patch2: fix-remove-loose-pg-from-dirty-list.patch
BuildRequires: make BuildRequires: make
BuildRequires: gcc BuildRequires: gcc
BuildRequires: doxygen BuildRequires: doxygen
@ -54,6 +57,8 @@ The %{name}-doc package contains automatically generated documentation for %{nam
%patch0 -p1 -b .make %patch0 -p1 -b .make
%patch1 -p1 -b .s390-check %patch1 -p1 -b .s390-check
%patch2 -p1 -b .page_dirty
%build %build
pushd %{archive_path} pushd %{archive_path}
@ -121,6 +126,9 @@ popd
%changelog %changelog
* Mon Nov 05 2018 Jan Staněk <jstanek@redhat.com> - 0.9.22-4
- Import upstream fix for rhbz#1645114
* Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org> - 0.9.22-3 * Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org> - 0.9.22-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild