• dlenev@mockturtle.local's avatar
    Fix for bug#19403/12212 "Crash that happens during removing of database name · 8fb55ff0
    dlenev@mockturtle.local authored
    from cache" and #21216 "Simultaneous DROP TABLE and SHOW OPEN TABLES causes
    server to crash".
    
    Crash happened when one ran DROP DATABASE or SHOW OPEN TABLES statements
    while concurrently doing DROP TABLE (or RENAME TABLE, CREATE TABLE LIKE
    or any other command that takes name-lock) in other connection.
    
    This problem was caused by the fact that table placeholders which were
    added to table cache in order to obtain name-lock on table had
    TABLE_SHARE::db and table_name set to 0. Therefore they broke assumption
    that these members are non-0 for all tables in table cache on which some
    of our code relies.
    
    The fix sets these members for such placeholders to appropriate value making
    this assumption true again. As attempt to avoid such problems in future
    we introduce auxiliary TABLE_SHARE::set_table_cache_key() methods which
    should be used when one wants to set TABLE_SHARE::table_cache_key and which
    ensure that TABLE_SHARE::table_name/db are set properly.
    
    Test cases for these bugs were added to 5.0 test-suite (with 5.0-specific
    fix for bug #21216).
    8fb55ff0
lock.cc 41.5 KB