• Thayumanavar's avatar
    BUG#18054998 - BACKPORT FIX FOR BUG#11765785 to 5.5 · 819eb3e0
    Thayumanavar authored
    This is a backport of the patch of bug#11765785. Commit message
    by Prabakaran Thirumalai from bug#11765785 is reproduced below:
    Description:
    ------------
    Global Query ID (global_query_id ) is not incremented for PING and 
    statistics command. These two query types are filtered before 
    incrementing the global query id. This causes race condition and 
    results in duplicate query id for different queries originating from 
    different connections.
          
    Analysis:
    ---------
    sqlparse.cc::dispath_command() is the only place in code which sets 
    thd->query_ id to global_query_id and then increments it based on the 
    query type. In all other places it is incremented first and then 
    assigned to thd->query_id.
          
    This is done such that global_query_id is not incremented for PING 
    and statistics commands in dispatch_command() function.
          
    Fix:
    ----
    As per suggestion from Serg, "There is no reason to skip query_id for 
    the PING and STATISTICS command.", removing the check which filters 
    PING and statistics commands.
          
    Instead of using get_query_id() and next_query_id() which can still 
    cause race condition if context switch happens soon after executing 
    get_query_id(), changing the code to use next_query_id() instead of 
    get_query_id() as it is done in other parts of code which deals with 
    global_query_id.
          
    Removed get_query_id() function and forced next_query_id() caller 
    to use the return value by specifying warn_unused_result attribute.
    819eb3e0
sql_class.h 119 KB