Fix deadlocks when reading/writing off-page duplicate tree

Resolves: #1349779
This commit is contained in:
Petr Kubat 2017-10-31 16:29:35 +01:00
parent 0f9eac24b2
commit 10b101d3ad
2 changed files with 23 additions and 3 deletions

View File

@ -0,0 +1,14 @@
--- db-5.3.21/src/db/db_cam.c.opd_deadlock 2017-10-31 12:20:54.118979690 +0100
+++ db-5.3.21/src/db/db_cam.c 2017-10-31 12:21:06.828739341 +0100
@@ -868,6 +868,11 @@
flags == DB_PREV || flags == DB_PREV_DUP)) {
if (tmp_rmw && (ret = dbc->am_writelock(dbc)) != 0)
goto err;
+ /* Latch the primary tree page here in order to not deadlock later. */
+ if (cp->page == NULL &&
+ (ret = __memp_fget(mpf, &cp->pgno,
+ dbc->thread_info, dbc->txn, 0, &cp->page)) != 0)
+ goto err;
if (F_ISSET(dbc, DBC_TRANSIENT))
opd = cp->opd;
else if ((ret = __dbc_idup(cp->opd, &opd, DB_POSITION)) != 0)

View File

@ -4,7 +4,7 @@
Summary: The Berkeley DB database library for C Summary: The Berkeley DB database library for C
Name: libdb Name: libdb
Version: 5.3.28 Version: 5.3.28
Release: 28%{?dist} Release: 29%{?dist}
Source0: http://download.oracle.com/berkeley-db/db-%{version}.tar.gz Source0: http://download.oracle.com/berkeley-db/db-%{version}.tar.gz
Source1: http://download.oracle.com/berkeley-db/db.1.85.tar.gz Source1: http://download.oracle.com/berkeley-db/db.1.85.tar.gz
# For mt19937db.c # For mt19937db.c
@ -43,6 +43,8 @@ Patch32: db-5.3.28-rpm-lock-check.patch
# downstream patch to hotfix rhbz#1464033, sent upstream # downstream patch to hotfix rhbz#1464033, sent upstream
Patch33: db-5.3.28-cwd-db_config.patch Patch33: db-5.3.28-cwd-db_config.patch
Patch34: libdb-5.3.21-region-size-check.patch Patch34: libdb-5.3.21-region-size-check.patch
# Patch sent upstream
Patch35: checkpoint-opd-deadlock.patch
URL: http://www.oracle.com/database/berkeley-db/ URL: http://www.oracle.com/database/berkeley-db/
License: BSD and LGPLv2 and Sleepycat License: BSD and LGPLv2 and Sleepycat
@ -240,6 +242,7 @@ popd
%patch32 -p1 %patch32 -p1
%patch33 -p1 %patch33 -p1
%patch34 -p1 %patch34 -p1
%patch35 -p1
cd dist cd dist
./s_config ./s_config
@ -451,10 +454,13 @@ rm -rf ${RPM_BUILD_ROOT}
%{_libdir}/libdb_java.so %{_libdir}/libdb_java.so
%changelog %changelog
* Tue Oct 24 2017 Petr Kubat <pkubat@redhat.com> 5.3.21-28 * Tue Oct 31 2017 Petr Kubat <pkubat@redhat.com> 5.3.28-29
- Fix deadlocks when reading/writing off-page duplicate tree (#1349779)
* Tue Oct 24 2017 Petr Kubat <pkubat@redhat.com> 5.3.28-28
- Run a number of quick subsystem checks on build - Run a number of quick subsystem checks on build
* Thu Sep 07 2017 Petr Kubat <pkubat@redhat.com> 5.3.21-27 * Thu Sep 07 2017 Petr Kubat <pkubat@redhat.com> 5.3.28-27
- Fail properly when encountering removed or 0-byte regions (#1471011) - Fail properly when encountering removed or 0-byte regions (#1471011)
* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 5.3.28-26 * Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 5.3.28-26