• dlenev@mysql.com's avatar
    Fix for bugs#12472/#15137 'CREATE TABLE ... SELECT ... which explicitly · 589daad1
    dlenev@mysql.com authored
    or implicitly uses stored function gives "Table not locked" error'
    
    CREATE TABLE ... SELECT ... statement which was explicitly or implicitly
    (through view) using stored function gave "Table not locked" error.
    
    The actual bug resides in the current locking scheme of CREATE TABLE SELECT
    code, which first opens and locks tables of the SELECT statement itself,
    and then, having SELECT tables locked, creates the .FRM, opens the .FRM and
    acquires lock on it. This scheme opens a possibility for a deadlock, which
    was present and ignored since version 3.23 or earlier. This scheme also
    conflicts with the invariant of the prelocking algorithm -- no table can
    be open and locked while there are tables locked in prelocked mode.
    
    The patch makes an exception for this invariant when doing CREATE TABLE ...
    SELECT, thus extending the possibility of a deadlock to the prelocked mode.
    We can't supply a better fix in 5.0.
    589daad1
sql_table.cc 126 KB