• Sujatha's avatar
    MDEV-20707: Missing memory barrier in parallel replication error handler in wait_for_prior_commit() · caa79081
    Sujatha authored
    revision-id: 673e253724979fd9fe43a4a22bd7e1b2c3a5269e
    Author: Kristian Nielsen
    
    Fix missing memory barrier in wait_for_commit.
    
    The function wait_for_commit::wait_for_prior_commit() has a fast path where it
    checks without locks if wakeup_subsequent_commits() has already been called.
    This check was missing a memory barrier. The waitee thread does two writes to
    variables `waitee' and `wakeup_error', and if the waiting thread sees the
    first write it _must_ also see the second or incorrect behavior will occur.
    This requires memory barriers between both the writes (release semantics) and
    the reads (acquire semantics) of those two variables.
    
    Other accesses to these variables are done under lock or where only one thread
    will be accessing them, and can be done without barriers (relaxed semantics).
    caa79081
sql_class.cc 228 KB