Hi!
On Jul 13, eugene@stripped wrote:
> ChangeSet@stripped, 2007-07-13 02:04:05+04:00, evgen@stripped +8 -0
> Bug#24989: The DEADLOCK error is improperly handled by InnoDB.
>
> When innodb detects a deadlock it calls ha_rollback_trans() to rollback the
> main transaction. But such action isn't allowed from inside of triggers and
> functions. When it happen the 'Explicit or implicit commit' error is thrown
> even if there is no commit/rollback statements in the trigger/function. This
> leads to the user confusion.
>
> Now the convert_error_code_to_mysql() function doesn't call the
> ha_rollback_trans() function directly but rather calls the
> mark_transaction_to_rollback function and returns an error.
> The sp_rcontext::find_handler() now doesn't allow errors to be caught by the
> trigger/function error handlers when the thd->is_fatal_sub_stmt_error flag
> is set. Procedures are still allowed to catch such errors.
> The sp_rcontext::find_handler function now accepts a THD handle as a parameter.
> The transaction_rollback_request and the is_fatal_sub_stmt_error flags are
> added to the THD class. The are initialized by the THD class constructor.
> Now the ha_autocommit_or_rollback function rolls back main transaction
> when not in a sub statement and the thd->transaction_rollback_request
> is set.
> The THD::restore_sub_statement_state function now resets the
> thd->is_fatal_sub_stmt_error flag on exit from a sub-statement.
ok with me.
please wait for the second reviewer (kostja) to approve.
Regards / Mit vielen Grüssen,
Sergei
--
__ ___ ___ ____ __
/ |/ /_ __/ __/ __ \/ / Sergei Golubchik <serg@stripped>
/ /|_/ / // /\ \/ /_/ / /__ Principal Software Developer
/_/ /_/\_, /___/\___\_\___/ MySQL GmbH, Radlkoferstr. 2, D-81373 München
<___/ Geschäftsführer: Kaj Arnö - HRB
München 162140