MDEV-10813, the function rw_lock_lock_word_decr() was simplified in an incorrect way:
Because we sample the local_lock_word only once at the start of the loop, it is possible that the following happens during rw_lock_s_lock():
- Another thread is holding an S-latch, so that local_lock_word will be X_LOCK_DECR-1.
- The other thread will release its S-latch and never come back.
- An infinite loop will occur, because lock->lock_word will be X_LOCK_DECR from that point onwards.
- Only a subsequent S-latch acquisition from another thread could resolve the hang.