diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc
index cf3ba9c8c4044aa6b101f3e78241ccf6d3e5acde..31201474c05bea1bc24075e58367f0f38249595a 100644
--- a/sql/sql_cache.cc
+++ b/sql/sql_cache.cc
@@ -830,6 +830,11 @@ sql mode: 0x%lx, sort len: %lu, conncat len: %lu",
                           flags.sql_mode,
                           flags.max_sort_length,
                           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);
 
     if (query_cache_size == 0)
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index 59391a333c33fd457611380830fc4eb8d8954e99..5a6bbe011830bff017f6b2eb72960255d48f7e7f 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -919,14 +919,12 @@ bool select_send::send_data(List<Item> &items)
     return 0;
   }
 
-#ifdef HAVE_INNOBASE_DB
   /*
     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
     by thd
   */
     ha_release_temporary_latches(thd);
-#endif
 
   List_iterator_fast<Item> li(items);
   Protocol *protocol= thd->protocol;
@@ -956,12 +954,10 @@ bool select_send::send_data(List<Item> &items)
 
 bool select_send::send_eof()
 {
-#ifdef HAVE_INNOBASE_DB
   /* 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
      by thd */
     ha_release_temporary_latches(thd);
-#endif
 
   /* Unlock tables before sending packet to gain some speed */
   if (thd->lock)
diff --git a/sql/sql_cursor.cc b/sql/sql_cursor.cc
index 33ad27b9d148ffe8efdbc87d8354b179fb6f152c..2784e71ccaedb79988afd4feeb3d5db641a1fb28 100644
--- a/sql/sql_cursor.cc
+++ b/sql/sql_cursor.cc
@@ -445,9 +445,8 @@ Sensitive_cursor::fetch(ulong num_rows)
   if (error == NESTED_LOOP_CURSOR_LIMIT)
     join->resume_nested_loop= TRUE;
 
-#ifdef USING_TRANSACTIONS
     ha_release_temporary_latches(thd);
-#endif
+
   /* Grab free_list here to correctly free it in close */
   thd->restore_active_arena(this, &backup_arena);