• unknown's avatar
    BUG#28574 - repair table causes queries to fail with various · 93b10124
    unknown authored
                corruption errors: 126,134,145
    
    When one thread attempts to lock two (or more) tables and another
    thread executes statement that aborts these locks (e.g. REPAIR
    TABLE) we may get a table object with wrong lock type in a table
    cache.
    
    For example if SELECT FROM t1,t2 was aborted, subsequent INSERT
    INTO t1 may be executed under read lock.
    
    As a result we may get various table corruptions and even a server
    crash.
    
    This is fixed by resetting lock type in case lock was aborted by
    another thread.
    
    I failed to create reasonable test case for this bug.
    
    
    sql/lock.cc:
      If thr_multi_lock was aborted by another thread, it unlocks tables
      that were locked before one that was aborted. Lock type for tables
      that were after a table that was aborted preserved. Thus we need
      to reset lock data in case thr_multi_lock was aborted.
    93b10124
lock.cc 34.3 KB