mirror of
https://github.com/MariaDB/server.git
synced 2025-03-12 18:18:37 +01:00
![]() TRANSACTION ROLLBACK Problem: ======= "prepare_commit_mutex" is acquired during "innobase_xa_prepare" and it is freed only in "innobase_commit". After prepare, if the commit operation fails the transaction is rolled back but the mutex is not released. Analysis: ======== During transaction commit process transaction is prepared and the "prepare_commit_mutex" is acquired to preserve the order of commit. After prepare write to binlog is initiated. File: sql/handler.cc if (error || (is_real_trans && xid && -----> (error= !(cookie= tc_log->log_xid(thd, xid))))) { ha_rollback_trans(thd, all); In the above code "tc_log->log_xid" operation fails. When the write to binlog fails the transaction is rolled back with out freeing the mutex. A subsequent "INSERT" operation tries to acquire the same mutex during its commit process and the server aborts. Fix: === "prepare_commit_mutex" is freed during "innobase_rollback". |
||
---|---|---|
.. | ||
btr | ||
buf | ||
data | ||
dict | ||
dyn | ||
eval | ||
fil | ||
fsp | ||
fut | ||
ha | ||
handler | ||
ibuf | ||
include | ||
lock | ||
log | ||
mach | ||
mem | ||
mtr | ||
os | ||
page | ||
pars | ||
que | ||
read | ||
rem | ||
row | ||
srv | ||
sync | ||
trx | ||
usr | ||
ut | ||
CMakeLists.txt | ||
compile-innodb | ||
COPYING.Google | ||
COPYING.Percona | ||
Doxyfile | ||
ha_innodb.def |