• Marko Mäkelä's avatar
    MDEV-28289 fts_optimize_sync_table() is acquiring dict_sys.latch while holding it · 840bab85
    Marko Mäkelä authored
    dict_acquire_mdl_shared(): Invoke the correct variant
    dict_table_t::parse_name<true>() also when trylock=true,
    that is, we are being called from fts_optimize_sync_table().
    
    Ever since commit 82b7c561 (MDEV-24258)
    this code was prone to a hang. If another thread requested an
    exclusive dict_sys.latch between the time
    dict_acquire_mdl_shared<trylock=true>() acquired a shared dict_sys.latch
    and dict_table_t::parse_name<false>() was trying to acquire another
    shared dict_sys.latch, InnoDB would get into an infinite livelock
    of threads, because the futex-based srw-lock implementation prioritizes
    exclusive latch requests.
    
    dict_table_t::parse_name(): Rename the template parameter dict_locked
    into dict_frozen.
    840bab85
dict0mem.h 85.1 KB