Index: handler/ha_innodb.cc
===================================================================
--- handler/ha_innodb.cc	(revision 854)
+++ handler/ha_innodb.cc	(working copy)
@@ -6562,7 +6562,8 @@ ha_innobase::store_lock(
 	     && lock_type != TL_IGNORE)) {
 
 		/* The OR cases above are in this order:
-		1) MySQL is doing LOCK TABLES ... READ LOCAL, or
+		1) MySQL is doing LOCK TABLES ... READ LOCAL, or we
+		are processing a stored procedure or function, or
 		2) (we do not know when TL_READ_HIGH_PRIORITY is used), or
 		3) this is a SELECT ... IN SHARE MODE, or
 		4) we are doing a complex SQL statement like
@@ -6624,7 +6625,8 @@ ha_innobase::store_lock(
 		single transaction stored procedure call deterministic
 		(if it does not use a consistent read). */
 
-		if (lock_type == TL_READ && thd->in_lock_tables) {
+		if (lock_type == TL_READ
+		    && thd->lex->sql_command == SQLCOM_LOCK_TABLES) {
 			/* We come here if MySQL is processing LOCK TABLES
 			... READ LOCAL. MyISAM under that table lock type
 			reads the table as it was at the time the lock was
@@ -6683,8 +6685,7 @@ ha_innobase::store_lock(
 		(MySQL does have thd->in_lock_tables TRUE there). */
 
 		if (lock_type == TL_READ_NO_INSERT
-		    && (!thd->in_lock_tables
-			|| thd->lex->sql_command == SQLCOM_CALL)) {
+		    && thd->lex->sql_command != SQLCOM_LOCK_TABLES) {
 
 			lock_type = TL_READ;
 		}
