• unknown's avatar
    A fix for Bug#7209 "Client error with "Access Denied" on updates · f577d864
    unknown authored
    when high concurrency": remove HASH::current_record and make it
    an external search parameter, so that it can not be the cause of a 
    race condition under high concurrent load.
    The bug was in a race condition in table_hash_search,
    when column_priv_hash.current_record was overwritten simultaneously
    by multiple threads, causing the search for a suitable grant record
    to fail.
    No test case as the bug is repeatable only under concurrent load.
    
    
    include/hash.h:
      - remove current_record from HASH, instead modify hash_first,
      hash_next to accept HASH_SEARCH_STATE as an IN/OUT parameter
    mysys/hash.c:
      - remove HASH::current_record
      - change declarations of functions that use HASH in read-only mode
        to accept const HASH * instead of HASH *. 
      - implement hash_search; move the old implementation of hash_search
      to hash_first
    mysys/testhash.c:
      - adjust the test case to changed function declarations
    sql/lock.cc:
      - adjust to changed declarations of hash_search, hash_next
    sql/sql_acl.cc:
      - adjust to changed declarations of hash_search, hash_next
    sql/sql_base.cc:
      - adjust to changed declarations of hash_search, hash_nex
    sql/sql_cache.cc:
      - adjust to a changed declaration of hash_replace
    f577d864
lock.cc 28.6 KB