mariadb/storage/innobase/handler
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
..
ha_innodb.cc Bug#16513588:"PREPARE_COMMIT_MUTEX" IS NOT FREED DURING 2013-05-07 13:30:25 +05:30
ha_innodb.h Bug 16395495 - OLD FSF ADDRESS IN GPL HEADER 2013-03-19 13:29:12 +01:00
handler0alter.cc Merge mysql-5.1 to mysql-5.5. 2012-11-15 22:11:03 +02:00
i_s.cc Bug#14756795 SELECT FROM NEW INNODB I_S TABLES CRASHES SERVER 2013-01-30 10:53:43 +05:30
i_s.h Bug #13113026 INFORMATION_SCHEMA.INNODB_BUFFER_PAGE_LRUFROM 5.6 BACKPORT 2012-07-25 10:48:16 +05:30