• Marko Mäkelä's avatar
    Fix a deadlock in thd_report_wait_for() · ca40330d
    Marko Mäkelä authored
    Unlike commit a54abf01 claimed,
    the caller of THD::awake() may actually hold the InnoDB lock_sys->mutex.
    That commit introduced a deadlock of threads in the replication slave
    when running the test rpl.rpl_parallel_optimistic_nobinlog.
    
    lock_trx_handle_wait(): Expect the callers to acquire and release
    lock_sys->mutex and trx->mutex.
    
    innobase_kill_query(): Restore the logic for conditionally acquiring
    and releasing the mutexes. THD::awake() can be called from inside
    InnoDB while holding one or both mutexes, via thd_report_wait_for() and
    via wsrep_innobase_kill_one_trx().
    ca40330d
lock0lock.cc 224 KB