• davi@endora.local's avatar
    Bug#30882 Dropping a temporary table inside a stored function may cause a server crash · cc007acb
    davi@endora.local authored
    If a stored function that contains a drop temporary table statement
    is invoked by a create temporary table of the same name may cause
    a server crash. The problem is that when dropping a table no check
    is done to ensure that table is not being used by some outer query
    (or outer statement), potentially leaving the outer query with a
    reference to a stale (freed) table.
    
    The solution is when dropping a temporary table, always check if
    the table is being used by some outer statement as a temporary
    table can be dropped inside stored procedures.
    
    The check is performed by looking at the TABLE::query_id value for
    temporary tables. To simplify this check and to solve a bug related
    to handling of temporary tables in prelocked mode, this patch changes
    the way in which this member is used to track the fact that table is
    used/unused. Now we ensure that TABLE::query_id is zero for unused
    temporary tables (which means that all temporary tables which were
    used by a statement should be marked as free for reuse after it's
    execution has been completed).
    cc007acb
table.h 46.3 KB