summaryrefslogtreecommitdiff
path: root/storage/innobase/trx/trx0trx.cc
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2021-10-21 14:57:00 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2021-10-21 14:57:00 +0300
commit489ef007bec398c3b7b628325b225c3a015922cf (patch)
tree7d1d5b1ea2c55d608f8697377776b9777fa622be /storage/innobase/trx/trx0trx.cc
parentd10c42b42541deed899dd1d1e04b69475339196c (diff)
parentd5bcccdabbf1a23c75ab4ee0c14149eb6ed27d98 (diff)
downloadmariadb-git-489ef007bec398c3b7b628325b225c3a015922cf.tar.gz
Merge 10.3 into 10.4
Diffstat (limited to 'storage/innobase/trx/trx0trx.cc')
-rw-r--r--storage/innobase/trx/trx0trx.cc18
1 files changed, 10 insertions, 8 deletions
diff --git a/storage/innobase/trx/trx0trx.cc b/storage/innobase/trx/trx0trx.cc
index 770c675c14f..038cf9be825 100644
--- a/storage/innobase/trx/trx0trx.cc
+++ b/storage/innobase/trx/trx0trx.cc
@@ -1377,14 +1377,6 @@ inline void trx_t::commit_in_memory(const mtr_t *mtr)
ut_ad(!rsegs.m_redo.undo);
ut_ad(UT_LIST_GET_LEN(lock.evicted_tables) == 0);
- if (trx_rseg_t *rseg= rsegs.m_redo.rseg)
- {
- mutex_enter(&rseg->mutex);
- ut_ad(rseg->trx_ref_count > 0);
- --rseg->trx_ref_count;
- mutex_exit(&rseg->mutex);
- }
-
if (mtr)
{
if (trx_undo_t *&undo= rsegs.m_noredo.undo)
@@ -1438,6 +1430,16 @@ inline void trx_t::commit_in_memory(const mtr_t *mtr)
ut_ad(!rsegs.m_noredo.undo);
+ /* Only after trx_undo_commit_cleanup() it is safe to release
+ our rseg reference. */
+ if (trx_rseg_t *rseg= rsegs.m_redo.rseg)
+ {
+ mutex_enter(&rseg->mutex);
+ ut_ad(rseg->trx_ref_count > 0);
+ --rseg->trx_ref_count;
+ mutex_exit(&rseg->mutex);
+ }
+
/* Free all savepoints, starting from the first. */
trx_named_savept_t *savep= UT_LIST_GET_FIRST(trx_savepoints);