• Jon Olav Hauglid's avatar
    Bug #51376 Assert `! is_set()' failed in · 51793af9
    Jon Olav Hauglid authored
               Diagnostics_area::set_ok_status on DROP FUNCTION
    
    This assert tests that the server is not trying to send "ok" to
    the client if an error has occured during statement processing.
    
    In this case, the assert was triggered by lock timeout errors when
    accessing system tables to do an implicit REVOKE after executing
    DROP FUNCTION/PROCEDURE. In practice, this was only likely to
    happen with very low values for "lock_wait_timeout" (in the bug report
    1 second was used). These errors were ignored and the server tried
    to send "ok" to the client, triggering the assert.
    
    The patch for Bug#45225 introduced lock timeouts for metadata locks.
    This made it possible to get timeouts when accessing system tables.
    Note that a followup patch for Bug#45225 pushed after this
    bug was reported, changed accessing of system tables such
    that the user-supplied timeout value is ignored and the maximum
    timeout value is used instead. This exact bug was therefore
    only noticeable in the period between the initial Bug#45225 patch
    and the followup patch.
    
    However, the same problem could occur for any errors during revoking
    of privileges - not just timeouts. This patch fixes the problem by
    making sure that any errors during revoking of privileges are
    reported to the client. 
    
    Test case added to sp-destruct.test. Since the original bug is not
    reproducable now that system tables are accessed using a a long
    timeout value, this test instead calls DROP FUNCTION with a grant
    system table missing.
    51793af9
sql_parse.cc 235 KB