From 4eb4b37cfa8291e0740d4f5978a40974308dee63 Mon Sep 17 00:00:00 2001
From: unknown <davi@moksha.com.br>
Date: Fri, 12 Oct 2007 10:55:46 -0300
Subject: Bug#31409 RENAME TABLE causes server crash or deadlock when used with
 HANDLER statements

If mysql_lock_tables fails because the lock was aborted, we need to
reset thd->some_tables_delete, otherwise we might loop indefinitely
because handler's tables are not closed in a standard way, meaning
that close_thread_tables() (which resets some_tables_deleted) is not
used.

This patch fixes sporadical failures of handler_myisam/innodb tests
which were introduced by previous fix for this bug.


sql/sql_handler.cc:
  Properly reset thd->some_tables_deleted if mysql_lock_tables
  fails for some reason.
---
 sql/sql_handler.cc | 6 ++++++
 1 file changed, 6 insertions(+)

(limited to 'sql/sql_handler.cc')

diff --git a/sql/sql_handler.cc b/sql/sql_handler.cc
index e87381dd49c..822f2b2c419 100644
--- a/sql/sql_handler.cc
+++ b/sql/sql_handler.cc
@@ -466,6 +466,12 @@ retry:
   {
     mysql_ha_close_table(thd, tables);
     hash_tables->table= NULL;
+    /*
+      The lock might have been aborted, we need to manually reset
+      thd->some_tables_deleted because handler's tables are closed
+      in a non-standard way. Otherwise we might loop indefinitely.
+    */
+    thd->some_tables_deleted= 0;
     goto retry;
   }
 
-- 
cgit v1.2.1