• Marko Mäkelä's avatar
    MDEV-11802 innodb.innodb_bug14676111 fails · a13a636c
    Marko Mäkelä authored
    The function trx_purge_stop() was calling os_event_reset(purge_sys->event)
    before calling rw_lock_x_lock(&purge_sys->latch). The os_event_set()
    call in srv_purge_coordinator_suspend() is protected by that X-latch.
    
    It would seem a good idea to consistently protect both os_event_set()
    and os_event_reset() calls with a common mutex or rw-lock in those
    cases where os_event_set() and os_event_reset() are used
    like condition variables, tied to changes of shared state.
    
    For each os_event_t, we try to document the mutex or rw-lock that is
    being used. For some events, frequent calls to os_event_set() seem to
    try to avoid hangs. Some events are never waited for infinitely, only
    timed waits, and os_event_set() is used for early termination of these
    waits.
    
    os_aio_simulated_put_read_threads_to_sleep(): Define as a null macro
    on other systems than Windows. TODO: remove this altogether and disable
    innodb_use_native_aio on Windows.
    
    os_aio_segment_wait_events[]: Initialize only if innodb_use_native_aio=0.
    
    log_write_flush_to_disk_low(): Invoke log_mutex_enter() at the end, to
    avoid race conditions when changing the system state. (No potential
    race condition existed before MySQL 5.7.)
    a13a636c
srv0srv.h 40.5 KB