mariadb/storage/innobase
Sujatha Sivakumar 627e7334ec Bug#16513588:"PREPARE_COMMIT_MUTEX" IS NOT FREED DURING
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".
2013-05-07 13:30:25 +05:30
..
btr
buf
data
dict
dyn
eval
fil
fsp
fut
ha
handler Bug#16513588:"PREPARE_COMMIT_MUTEX" IS NOT FREED DURING 2013-05-07 13:30:25 +05:30
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