• Sergey Vojtovich's avatar
    MDEV-5492 - Reduce usage of LOCK_open: TABLE::in_use · 048e9c40
    Sergey Vojtovich authored
    Move TABLE::in_use out of LOCK_open.
    
    This is done with assumtion that foreign threads accessing TABLE::in_use
    will only need consistent value _after_ marking table for flush and purging
    unused table instances. In this case TABLE::in_use will always point to a
    valid thread object.
    
    Previously FLUSH TABLES thread may wait for tables flushed subsequently by
    concurrent threads which breaks the above assumption, e.g.:
    open tables: t1 (version= 1)
    thr1 (FLUSH TABLES): refresh_version++
    thr1 (FLUSH TABLES): purge table cache
    open tables: none
    thr2 (SELECT * FROM t1): open tables: t1
    open tables: t1 (version= 2)
    thr2 (FLUSH TABLES): refresh_version++
    thr2 (FLUSH TABLES): purge table cache
    thr1 (FLUSH TABLES): wait for old tables (including t1 with version 2)
    
    It is fixed so that FLUSH TABLES waits only for tables that were open
    heretofore.
    048e9c40
sql_test.cc 18.1 KB