mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
ha_innodb.cc:
Fix bug #12852 : do not increment the open handle count to a table if the table does not have an .ibd file and InnoDB decides to return an error from the ::open() function; then the table can be dropped even if the user has tried to open it
This commit is contained in:
@ -1651,6 +1651,8 @@ ha_innobase::open(
|
||||
my_free((char*) upd_buff, MYF(0));
|
||||
my_errno = ENOENT;
|
||||
|
||||
dict_table_decrement_handle_count(ib_table);
|
||||
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
|
||||
@ -5439,6 +5441,19 @@ ha_innobase::store_lock(
|
||||
|
||||
if (lock_type != TL_IGNORE && lock.type == TL_UNLOCK) {
|
||||
|
||||
if (lock_type == TL_READ && thd->in_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
|
||||
granted (new inserts are allowed, but not seen by the
|
||||
reader). To get a similar effect on an InnoDB table,
|
||||
we must use LOCK TABLES ... READ. We convert the lock
|
||||
type here, so that for InnoDB, READ LOCAL is
|
||||
equivalent to READ. */
|
||||
|
||||
lock_type = TL_READ_NO_INSERT;
|
||||
}
|
||||
|
||||
/* If we are not doing a LOCK TABLE or DISCARD/IMPORT
|
||||
TABLESPACE, then allow multiple writers */
|
||||
|
||||
|
Reference in New Issue
Block a user