Commit 612266ec authored by aivanov@mysql.com's avatar aivanov@mysql.com

Fixed BUG#15758: "Holding adaptive search latch in

 innobase_query_caching_of_table_permitted()".
 Applied the patch due to Heikki Tuuri.
 Also removed superfluous #ifdefs.
parent 85ff7bec
...@@ -830,6 +830,11 @@ sql mode: 0x%lx, sort len: %lu, conncat len: %lu", ...@@ -830,6 +830,11 @@ sql mode: 0x%lx, sort len: %lu, conncat len: %lu",
flags.sql_mode, flags.sql_mode,
flags.max_sort_length, flags.max_sort_length,
flags.group_concat_max_len)); flags.group_concat_max_len));
/*
Make InnoDB to release the adaptive hash index latch before
acquiring the query cache mutex.
*/
ha_release_temporary_latches(thd);
STRUCT_LOCK(&structure_guard_mutex); STRUCT_LOCK(&structure_guard_mutex);
if (query_cache_size == 0) if (query_cache_size == 0)
......
...@@ -919,14 +919,12 @@ bool select_send::send_data(List<Item> &items) ...@@ -919,14 +919,12 @@ bool select_send::send_data(List<Item> &items)
return 0; return 0;
} }
#ifdef HAVE_INNOBASE_DB
/* /*
We may be passing the control from mysqld to the client: release the We may be passing the control from mysqld to the client: release the
InnoDB adaptive hash S-latch to avoid thread deadlocks if it was reserved InnoDB adaptive hash S-latch to avoid thread deadlocks if it was reserved
by thd by thd
*/ */
ha_release_temporary_latches(thd); ha_release_temporary_latches(thd);
#endif
List_iterator_fast<Item> li(items); List_iterator_fast<Item> li(items);
Protocol *protocol= thd->protocol; Protocol *protocol= thd->protocol;
...@@ -956,12 +954,10 @@ bool select_send::send_data(List<Item> &items) ...@@ -956,12 +954,10 @@ bool select_send::send_data(List<Item> &items)
bool select_send::send_eof() bool select_send::send_eof()
{ {
#ifdef HAVE_INNOBASE_DB
/* We may be passing the control from mysqld to the client: release the /* We may be passing the control from mysqld to the client: release the
InnoDB adaptive hash S-latch to avoid thread deadlocks if it was reserved InnoDB adaptive hash S-latch to avoid thread deadlocks if it was reserved
by thd */ by thd */
ha_release_temporary_latches(thd); ha_release_temporary_latches(thd);
#endif
/* Unlock tables before sending packet to gain some speed */ /* Unlock tables before sending packet to gain some speed */
if (thd->lock) if (thd->lock)
......
...@@ -445,9 +445,8 @@ Sensitive_cursor::fetch(ulong num_rows) ...@@ -445,9 +445,8 @@ Sensitive_cursor::fetch(ulong num_rows)
if (error == NESTED_LOOP_CURSOR_LIMIT) if (error == NESTED_LOOP_CURSOR_LIMIT)
join->resume_nested_loop= TRUE; join->resume_nested_loop= TRUE;
#ifdef USING_TRANSACTIONS
ha_release_temporary_latches(thd); ha_release_temporary_latches(thd);
#endif
/* Grab free_list here to correctly free it in close */ /* Grab free_list here to correctly free it in close */
thd->restore_active_arena(this, &backup_arena); thd->restore_active_arena(this, &backup_arena);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment