Commit b796a7e4 authored by unknown's avatar unknown

Fix for BUG#8003 attempt 2:

  Call file->external_lock() for handler objects that index_merge code creates in addition to 
  the handler object opened in open_and_lock_tables.

parent 9531db91
...@@ -778,6 +778,7 @@ QUICK_RANGE_SELECT::~QUICK_RANGE_SELECT() ...@@ -778,6 +778,7 @@ QUICK_RANGE_SELECT::~QUICK_RANGE_SELECT()
DBUG_PRINT("info", ("Freeing separate handler %p (free=%d)", file, DBUG_PRINT("info", ("Freeing separate handler %p (free=%d)", file,
free_file)); free_file));
file->reset(); file->reset();
file->external_lock(current_thd, F_UNLCK);
file->close(); file->close();
} }
} }
...@@ -929,6 +930,7 @@ int QUICK_RANGE_SELECT::init_ror_merged_scan(bool reuse_handler) ...@@ -929,6 +930,7 @@ int QUICK_RANGE_SELECT::init_ror_merged_scan(bool reuse_handler)
DBUG_RETURN(0); DBUG_RETURN(0);
} }
THD *thd= current_thd;
if (!(file= get_new_handler(head, head->s->db_type))) if (!(file= get_new_handler(head, head->s->db_type)))
goto failure; goto failure;
DBUG_PRINT("info", ("Allocated new handler %p", file)); DBUG_PRINT("info", ("Allocated new handler %p", file));
...@@ -937,11 +939,14 @@ int QUICK_RANGE_SELECT::init_ror_merged_scan(bool reuse_handler) ...@@ -937,11 +939,14 @@ int QUICK_RANGE_SELECT::init_ror_merged_scan(bool reuse_handler)
/* Caller will free the memory */ /* Caller will free the memory */
goto failure; goto failure;
} }
if (file->external_lock(thd, F_RDLCK))
goto failure;
if (file->extra(HA_EXTRA_KEYREAD) || if (file->extra(HA_EXTRA_KEYREAD) ||
file->extra(HA_EXTRA_RETRIEVE_PRIMARY_KEY) || file->extra(HA_EXTRA_RETRIEVE_PRIMARY_KEY) ||
init() || reset()) init() || reset())
{ {
file->external_lock(thd, F_UNLCK);
file->close(); file->close();
goto failure; goto failure;
} }
......
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