You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
BUG#36093405: Signal 11 seen in Gtid_set::~Gtid_set
Group Replication maintains a memory structure that keeps track of
transactions accepted to commit but not committed on all members
yet. This structure, named certification info, is used to detect
conflicts and dependencies between transactions.
The certification info is cleaned periodically and on Group
Replication stop.
There was a race identified between these two operations, more
precisely:
1) Certifier::garbage_collect()
-> while (it != certification_info.end()) {
if (it->second->is_subset_not_equals(stable_gtid_set)) {
if (it->second->unlink() == 0) delete it->second;
2) Certifier::~Certifier()
-> clear_certification_info();
-> for (Certification_info::iterator it = certification_info.begin();
it != certification_info.end(); ++it) {
if (it->second->unlink() == 0) delete it->second;
`clear_certification_info()` was being called without securing
exclusive access to `certification_info` which could cause
concurrent access to its items, more precisely `delete it->second`.
To solve the above issue, `~Certifier()` (like all other callers) do
secure the exclusive access to certification info.
Change-Id: I28111d41adb54248d90137ee9d2c17196de045e8
0 commit comments