diff options
author | Andreas Sturmlechner <asturm@gentoo.org> | 2021-06-17 14:45:37 +0200 |
---|---|---|
committer | Andreas Sturmlechner <asturm@gentoo.org> | 2021-06-17 14:47:17 +0200 |
commit | 39c12693d5372029f54a3b853179bf4c7fada1c3 (patch) | |
tree | 7715557a93a98406b83d352ae7a1e12ec311b89d | |
parent | dev-cpp/yaml-cpp: enable tests, take package (diff) | |
download | gentoo-39c12693d5372029f54a3b853179bf4c7fada1c3.tar.gz gentoo-39c12693d5372029f54a3b853179bf4c7fada1c3.tar.bz2 gentoo-39c12693d5372029f54a3b853179bf4c7fada1c3.zip |
dev-util/mdds: Fix rtree_test
See also: https://gitlab.com/mdds/mdds/-/issues/66
Upstream commit 7ab81002fe127d16602b85b391c1d1b0422a9afd
Thanks-to: Paul Mulders <justinkb@gmail.com>
Closes: https://bugs.gentoo.org/775056
Package-Manager: Portage-3.0.20, Repoman-3.0.3
Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
-rw-r--r-- | dev-util/mdds/files/mdds-1.7.0-rtree_test.patch | 52 | ||||
-rw-r--r-- | dev-util/mdds/mdds-1.7.0.ebuild | 3 |
2 files changed, 54 insertions, 1 deletions
diff --git a/dev-util/mdds/files/mdds-1.7.0-rtree_test.patch b/dev-util/mdds/files/mdds-1.7.0-rtree_test.patch new file mode 100644 index 000000000000..391f89798915 --- /dev/null +++ b/dev-util/mdds/files/mdds-1.7.0-rtree_test.patch @@ -0,0 +1,52 @@ +From 7ab81002fe127d16602b85b391c1d1b0422a9afd Mon Sep 17 00:00:00 2001 +From: Kohei Yoshida <kohei.yoshida@gmail.com> +Date: Mon, 14 Jun 2021 22:52:14 -0400 +Subject: [PATCH] std::deque::erase invalidates all elements if the erased + element ... + +... is not the first or the last element. My previous assumption ( +that only the elements that occur after the erased element become +invalid) was in fact wrong. + +This should resolve #66. +--- + include/mdds/rtree_def.inl | 21 ++++++++++++--------- + 1 file changed, 12 insertions(+), 9 deletions(-) + +diff --git a/include/mdds/rtree_def.inl b/include/mdds/rtree_def.inl +index ed0e9be..84f0673 100644 +--- a/include/mdds/rtree_def.inl ++++ b/include/mdds/rtree_def.inl +@@ -836,17 +836,20 @@ bool rtree<_Key,_Value,_Trait>::directory_node::erase(const node_store* ns) + if (it == children.end()) + return false; + +- it = children.erase(it); ++ // NB: std::deque::erase invalidates all elements when the erased element ++ // is somwhere in the middle. But if the erased element is either the ++ // first or the last element, only the erased element becomes invalidated. + +- // All nodes that occur after the erased node have their memory addresses +- // shifted. ++ std::size_t pos = std::distance(children.begin(), it); ++ bool all_valid = pos == 0 || pos == children.size() - 1; + +- std::for_each(it, children.end(), +- [](node_store& this_ns) +- { +- this_ns.valid_pointer = false; +- } +- ); ++ it = children.erase(it); ++ ++ if (!all_valid) ++ { ++ for (node_store& ns : children) ++ ns.valid_pointer = false; ++ } + + return true; + } +-- +GitLab + diff --git a/dev-util/mdds/mdds-1.7.0.ebuild b/dev-util/mdds/mdds-1.7.0.ebuild index 6bd8e95ff762..62a57426b645 100644 --- a/dev-util/mdds/mdds-1.7.0.ebuild +++ b/dev-util/mdds/mdds-1.7.0.ebuild @@ -1,4 +1,4 @@ -# Copyright 1999-2020 Gentoo Authors +# Copyright 1999-2021 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=7 @@ -33,6 +33,7 @@ RDEPEND="${DEPEND}" PATCHES=( "${FILESDIR}/${PN}-1.5.0-buildsystem.patch" "${FILESDIR}/${P}-bashism.patch" # bug 723094 + "${FILESDIR}/${P}-rtree_test.patch" # bug 775056 ) pkg_pretend() { |