summaryrefslogtreecommitdiff
path: root/storage/innobase/trx/trx0roll.cc
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2019-09-04 17:52:04 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2019-09-04 17:52:04 +0300
commit537f8594a60a1e09d6da0933b55764e0f8abbf5c (patch)
tree628c68bccb01538df826045ba6f3aaa45c29b93a /storage/innobase/trx/trx0roll.cc
parent647d5b243020b799fd7112a801965f5780b86349 (diff)
parentf605ce08b5c0e6ed6907d0639bcc5b5630e9b40a (diff)
downloadmariadb-git-537f8594a60a1e09d6da0933b55764e0f8abbf5c.tar.gz
Merge 10.2 into 10.3
Diffstat (limited to 'storage/innobase/trx/trx0roll.cc')
-rw-r--r--storage/innobase/trx/trx0roll.cc4
1 files changed, 4 insertions, 0 deletions
diff --git a/storage/innobase/trx/trx0roll.cc b/storage/innobase/trx/trx0roll.cc
index 65aa454808f..709ec98259c 100644
--- a/storage/innobase/trx/trx0roll.cc
+++ b/storage/innobase/trx/trx0roll.cc
@@ -764,6 +764,10 @@ static my_bool trx_rollback_recovered_callback(rw_trx_hash_element_t *element,
mutex_enter(&element->mutex);
if (trx_t *trx= element->trx)
{
+ /* The trx->is_recovered flag and trx->state are set
+ atomically under the protection of the trx->mutex in
+ trx_t::commit_state(). We do not want to accidentally clean up
+ a non-recovered transaction here. */
mutex_enter(&trx->mutex);
if (trx->is_recovered && trx_state_eq(trx, TRX_STATE_ACTIVE))
trx_list->push_back(trx);