• Davi Arnaut's avatar
    Bug#43230: SELECT ... FOR UPDATE can hang with FLUSH TABLES WITH READ LOCK indefinitely · aebaf079
    Davi Arnaut authored
    The problem is that a SELECT .. FOR UPDATE statement might open
    a table and later wait for a impeding global read lock without
    noticing whether it is holding a table that is being waited upon
    the the flush phase of the process that took the global read
    lock.
    
    The same problem also affected the following statements:
    
    LOCK TABLES .. WRITE
    UPDATE .. SET (update and multi-table update)
    TRUNCATE TABLE ..
    LOAD DATA ..
    
    The solution is to make the above statements wait for a impending
    global read lock before opening the tables. If there is no
    impending global read lock, the statement raises a temporary
    protection against global read locks and progresses smoothly
    towards completion.
    
    Important notice: the patch does not try to address all possible
    cases, only those which are common and can be fixed unintrusively
    enough for 5.0.
    aebaf079
sql_yacc.yy 293 KB