summaryrefslogtreecommitdiff
path: root/libstdc++-v3/ChangeLog
diff options
context:
space:
mode:
authorFrançois Dumont <fdumont@gcc.gnu.org>2020-02-29 18:22:55 +0100
committerFrançois Dumont <fdumont@gcc.gnu.org>2020-05-10 23:01:41 +0200
commit0b83c4fabb899fdbb3ae60ed75b7004b7859fae9 (patch)
treecaa0c24850710ec8e67b8088d17a1ab7b147d179 /libstdc++-v3/ChangeLog
parent92ed82367e7ccf5e031e9cb7c653c14a2d64ca89 (diff)
libstdc++ Enhance thread safety of debug mode iterators
Avoids race condition when checking for an iterator to be singular or to be comparable to another iterator. * src/c++/debug.cc (_Safe_sequence_base::_M_attach_single): Set attached iterator sequence pointer and version. (_Safe_sequence_base::_M_detach_single): Reset detached iterator. (_Safe_iterator_base::_M_attach): Remove attached iterator sequence pointer and version asignments. (_Safe_iterator_base::_M_attach_single): Likewise. (_Safe_iterator_base::_M_detach_single): Remove detached iterator reset. (_Safe_iterator_base::_M_singular): Use atomic load to access parent sequence. (_Safe_iterator_base::_M_can_compare): Likewise. (_Safe_iterator_base::_M_get_mutex): Likewise. (_Safe_local_iterator_base::_M_attach): Remove attached iterator container pointer and version assignments. (_Safe_local_iterator_base::_M_attach_single): Likewise. (_Safe_unordered_container_base::_M_attach_local_single): Set attached iterator container pointer and version. (_Safe_unordered_container_base::_M_detach_local_single): Reset detached iterator.
Diffstat (limited to 'libstdc++-v3/ChangeLog')
-rw-r--r--libstdc++-v3/ChangeLog23
1 files changed, 23 insertions, 0 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index a2ff49d9e51..8fb6b86474b 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,26 @@
+2020-05-10 François Dumont <fdumont@gcc.gnu.org>
+
+ * src/c++/debug.cc
+ (_Safe_sequence_base::_M_attach_single): Set attached iterator
+ sequence pointer and version.
+ (_Safe_sequence_base::_M_detach_single): Reset detached iterator.
+ (_Safe_iterator_base::_M_attach): Remove attached iterator sequence
+ pointer and version asignments.
+ (_Safe_iterator_base::_M_attach_single): Likewise.
+ (_Safe_iterator_base::_M_detach_single): Remove detached iterator
+ reset.
+ (_Safe_iterator_base::_M_singular): Use atomic load to access parent
+ sequence.
+ (_Safe_iterator_base::_M_can_compare): Likewise.
+ (_Safe_iterator_base::_M_get_mutex): Likewise.
+ (_Safe_local_iterator_base::_M_attach): Remove attached iterator container
+ pointer and version assignments.
+ (_Safe_local_iterator_base::_M_attach_single): Likewise.
+ (_Safe_unordered_container_base::_M_attach_local_single):Set attached
+ iterator container pointer and version.
+ (_Safe_unordered_container_base::_M_detach_local_single): Reset detached
+ iterator.
+
2020-05-07 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/94971 (partial)