Commit 3e206c1c authored by monty@hundin.mysql.fi's avatar monty@hundin.mysql.fi
Browse files

Do handler specific drop-database at safe place.

Fix for access problem (merge from 4.0)
parent 5af8ab54
Loading
Loading
Loading
Loading
+1 −8
Original line number Diff line number Diff line
@@ -166,6 +166,7 @@ void mysql_rm_db(THD *thd,char *db,bool if_exists)

  if ((deleted=mysql_rm_known_files(thd, dirp, path,0)) >= 0)
  {
    ha_drop_database(path);
    if (!thd->query)
    {
      thd->query = path;
@@ -189,14 +190,6 @@ void mysql_rm_db(THD *thd,char *db,bool if_exists)
exit:
  VOID(pthread_mutex_unlock(&LOCK_open));
  VOID(pthread_mutex_unlock(&LOCK_mysql_create_db));

  /* It seems MySQL may call this function when there still are queries
     running on tables of the database. Since InnoDB waits until the
     queries have ended, we have to call ha_drop_database outside
     the above two mutexes to avoid deadlocks. */

  ha_drop_database(path);

  DBUG_VOID_RETURN;
}

+2 −1
Original line number Diff line number Diff line
@@ -2154,7 +2154,8 @@ check_access(THD *thd,uint want_access,const char *db, uint *save_priv,
		      thd->priv_user, db); /* purecov: inspected */
  else
    db_access=thd->db_access;
  want_access &= ~EXTRA_ACL;			// Remove SHOW attribute
  // Remove SHOW attribute and access rights we already have
  want_access &= ~(thd->master_access | EXTRA_ACL);
  db_access= ((*save_priv=(db_access | thd->master_access)) & want_access);

  /* grant_option is set if there exists a single table or column grant */