diff options
author | François Dumont <fdumont@gcc.gnu.org> | 2020-02-29 18:22:55 +0100 |
---|---|---|
committer | François Dumont <fdumont@gcc.gnu.org> | 2020-05-10 23:01:41 +0200 |
commit | 0b83c4fabb899fdbb3ae60ed75b7004b7859fae9 (patch) | |
tree | caa0c24850710ec8e67b8088d17a1ab7b147d179 /libstdc++-v3/ChangeLog | |
parent | 92ed82367e7ccf5e031e9cb7c653c14a2d64ca89 (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/ChangeLog | 23 |
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) |