• Alexander Barkov's avatar
    MDEV-31578 DECLARE CURSOR: "Memory not freed: 280 bytes lost" on syntax error · fdab2c4c
    Alexander Barkov authored
    When CURSOR parameters get parsed, their sp_assignment_lex instances
    (one instance per parameter) get collected to List<sp_assignment_lex>.
    
    These instances get linked to sphead only in the end of the list.
    If a syntax error happened in the middle of the parameter list,
    these instances were not deleted, which caused memory leaks.
    
    Fix:
    
    using a Bison %destructor to free rules of the <sp_assignment_lex_list>
    type (on syntax errors).
    
    Afte the fix these sp_assignment_lex instances from CURSOR parameters
    deleted as follows:
    
    - If the CURSOR statement was fully parsed, then these instances
      get properly linked to sp_head structures, so they are deleted
      during ~sp_head (this did not change)
    
    - If the CURSOR statement failed on a syntax error, then by Bison's
      %destructor (this is being added in the current patch).
    fdab2c4c
sp-memory-leak.test 939 Bytes