Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-31636

Memory leak in Sys_var_gtid_binlog_state::do_check()

Details

    Description

      --source include/have_log_bin.inc
      RESET MASTER;
      --error ER_WRONG_VALUE_FOR_VAR
      SET
        @@global.gtid_binlog_state='1-1-101,2-1-2002',
        @@global.slave_parallel_mode=x;
      SELECT @@global.gtid_binlog_state;
      

      ***Warnings generated in error logs during shutdown after running tests: main.AAA
       
      Warning: Memory not freed: 224
      Warning:   40 bytes lost at 0x45fa260, allocated by T@0 at sql/sys_vars.cc:2120, sql/set_var.cc:246, sql/set_var.cc:810, sql/set_var.cc:738, sql/sql_parse.cc:5040, sql/sql_parse.cc:8023, sql/sql_parse.cc:1896, sql/sql_parse.cc:1407
      Warning:  184 bytes lost at 0x7f71481b7790, allocated by T@0 at mysys/my_malloc.c:143, sql/rpl_gtid.cc:1359, sql/sys_vars.cc:2114, sql/set_var.cc:246, sql/set_var.cc:810, sql/set_var.cc:738, sql/sql_parse.cc:5040, sql/sql_parse.cc:8023
      Warning:  152 bytes lost at 0x409c760, allocated by T@0 at mysys/array.c:73, mysys/hash.c:99, sql/sql_hset.h:37, sql/debug_sync.cc:90, sql/debug_sync.cc:166, sql/debug_sync.cc:1808, ??:0, csu/libc-start.c:268
      Warning:   40 bytes lost at 0x45fa260, allocated by T@0 at sql/sys_vars.cc:2120, sql/set_var.cc:246, sql/set_var.cc:810, sql/set_var.cc:738, sql/sql_parse.cc:5040, sql/sql_parse.cc:8023, sql/sql_parse.cc:1896, sql/sql_parse.cc:1407
      Warning:  184 bytes lost at 0x7f71481b7790, allocated by T@0 at mysys/my_malloc.c:143, sql/rpl_gtid.cc:1359, sql/sys_vars.cc:2114, sql/set_var.cc:246, sql/set_var.cc:810, sql/set_var.cc:738, sql/sql_parse.cc:5040, sql/sql_parse.cc:8023
      

      The leaked memory is allocated in Sys_var_gtid_binlog_state::do_check() in this code:

        if (!(data= (gtid_binlog_state_data *)my_malloc(PSI_INSTRUMENT_ME,
                                                        sizeof(*data), MYF(0))))
        {
      
      

      The problem happens because:

      • The @@global.gtid_binlog_state='1-1-101,2-1-2002' part of the statement allocated memory and assigns it to var->save_result.ptr
      • The @@global.slave_parallel_mode=x part fails on an error (wrong value)
      • The entire statement fails
      • The allocated value in var->save_result.ptr is never freed during the statement cleanup

      Attachments

        Activity

          bar Alexander Barkov created issue -
          bar Alexander Barkov made changes -
          Field Original Value New Value
          Description {code:sql}
          --source include/have_log_bin.inc
          RESET MASTER;
          --error ER_WRONG_VALUE_FOR_VAR
          SET
            @@global.gtid_binlog_state='1-1-101,2-1-2002',
            @@global.slave_parallel_mode=x;
          SELECT @@global.gtid_binlog_state;
          {code}

          {noformat}
          ***Warnings generated in error logs during shutdown after running tests: main.AAA

          Warning: Memory not freed: 224
          Warning: 40 bytes lost at 0x45fa260, allocated by T@0 at sql/sys_vars.cc:2120, sql/set_var.cc:246, sql/set_var.cc:810, sql/set_var.cc:738, sql/sql_parse.cc:5040, sql/sql_parse.cc:8023, sql/sql_parse.cc:1896, sql/sql_parse.cc:1407
          Warning: 184 bytes lost at 0x7f71481b7790, allocated by T@0 at mysys/my_malloc.c:143, sql/rpl_gtid.cc:1359, sql/sys_vars.cc:2114, sql/set_var.cc:246, sql/set_var.cc:810, sql/set_var.cc:738, sql/sql_parse.cc:5040, sql/sql_parse.cc:8023
          Warning: 152 bytes lost at 0x409c760, allocated by T@0 at mysys/array.c:73, mysys/hash.c:99, sql/sql_hset.h:37, sql/debug_sync.cc:90, sql/debug_sync.cc:166, sql/debug_sync.cc:1808, ??:0, csu/libc-start.c:268
          Warning: 40 bytes lost at 0x45fa260, allocated by T@0 at sql/sys_vars.cc:2120, sql/set_var.cc:246, sql/set_var.cc:810, sql/set_var.cc:738, sql/sql_parse.cc:5040, sql/sql_parse.cc:8023, sql/sql_parse.cc:1896, sql/sql_parse.cc:1407
          Warning: 184 bytes lost at 0x7f71481b7790, allocated by T@0 at mysys/my_malloc.c:143, sql/rpl_gtid.cc:1359, sql/sys_vars.cc:2114, sql/set_var.cc:246, sql/set_var.cc:810, sql/set_var.cc:738, sql/sql_parse.cc:5040, sql/sql_parse.cc:8023
          {noformat}

          The leaked memory is allocated in Sys_var_gtid_binlog_state::do_check() in this code:
          {code:spp}
            if (!(data= (gtid_binlog_state_data *)my_malloc(PSI_INSTRUMENT_ME,
                                                            sizeof(*data), MYF(0))))
            {

          {code}
          {code:sql}
          --source include/have_log_bin.inc
          RESET MASTER;
          --error ER_WRONG_VALUE_FOR_VAR
          SET
            @@global.gtid_binlog_state='1-1-101,2-1-2002',
            @@global.slave_parallel_mode=x;
          SELECT @@global.gtid_binlog_state;
          {code}

          {noformat}
          ***Warnings generated in error logs during shutdown after running tests: main.AAA

          Warning: Memory not freed: 224
          Warning: 40 bytes lost at 0x45fa260, allocated by T@0 at sql/sys_vars.cc:2120, sql/set_var.cc:246, sql/set_var.cc:810, sql/set_var.cc:738, sql/sql_parse.cc:5040, sql/sql_parse.cc:8023, sql/sql_parse.cc:1896, sql/sql_parse.cc:1407
          Warning: 184 bytes lost at 0x7f71481b7790, allocated by T@0 at mysys/my_malloc.c:143, sql/rpl_gtid.cc:1359, sql/sys_vars.cc:2114, sql/set_var.cc:246, sql/set_var.cc:810, sql/set_var.cc:738, sql/sql_parse.cc:5040, sql/sql_parse.cc:8023
          Warning: 152 bytes lost at 0x409c760, allocated by T@0 at mysys/array.c:73, mysys/hash.c:99, sql/sql_hset.h:37, sql/debug_sync.cc:90, sql/debug_sync.cc:166, sql/debug_sync.cc:1808, ??:0, csu/libc-start.c:268
          Warning: 40 bytes lost at 0x45fa260, allocated by T@0 at sql/sys_vars.cc:2120, sql/set_var.cc:246, sql/set_var.cc:810, sql/set_var.cc:738, sql/sql_parse.cc:5040, sql/sql_parse.cc:8023, sql/sql_parse.cc:1896, sql/sql_parse.cc:1407
          Warning: 184 bytes lost at 0x7f71481b7790, allocated by T@0 at mysys/my_malloc.c:143, sql/rpl_gtid.cc:1359, sql/sys_vars.cc:2114, sql/set_var.cc:246, sql/set_var.cc:810, sql/set_var.cc:738, sql/sql_parse.cc:5040, sql/sql_parse.cc:8023
          {noformat}

          The leaked memory is allocated in Sys_var_gtid_binlog_state::do_check() in this code:
          {code:spp}
            if (!(data= (gtid_binlog_state_data *)my_malloc(PSI_INSTRUMENT_ME,
                                                            sizeof(*data), MYF(0))))
            {

          {code}

          The problem happens because:
          - The {{@@global.gtid_binlog_state='1-1-101,2-1-2002'}} part of the statement allocated memory and assigns it to var->save_result.ptr
          - The {{@@global.slave_parallel_mode=x}} part fails on an error (wrong value)
          - The entire statement fails
          - The allocated value in var->save_result.ptr is never freed during the statement cleanup




          bar Alexander Barkov made changes -
          Affects Version/s 10.11.4 [ 28918 ]
          Affects Version/s 10.4 [ 22408 ]
          Affects Version/s 10.5 [ 23123 ]
          Affects Version/s 10.6 [ 24028 ]
          Affects Version/s 10.7 [ 24805 ]
          Affects Version/s 10.8 [ 26121 ]
          Affects Version/s 10.9 [ 26905 ]
          Affects Version/s 11.0 [ 28320 ]
          Affects Version/s 11.1 [ 28549 ]
          Affects Version/s 11.2 [ 28603 ]
          bar Alexander Barkov made changes -
          Fix Version/s 10.4 [ 22408 ]
          Fix Version/s 10.5 [ 23123 ]
          Fix Version/s 10.6 [ 24028 ]
          Fix Version/s 10.7 [ 24805 ]
          Fix Version/s 10.9 [ 26905 ]
          Fix Version/s 11.0 [ 28320 ]
          Fix Version/s 11.1 [ 28549 ]
          Fix Version/s 11.2 [ 28603 ]
          bar Alexander Barkov made changes -
          Priority Major [ 3 ] Critical [ 2 ]
          bar Alexander Barkov made changes -
          bar Alexander Barkov made changes -
          Assignee Alexander Barkov [ bar ]
          bar Alexander Barkov made changes -
          bar Alexander Barkov made changes -
          Assignee Alexander Barkov [ bar ] Andrei Elkin [ elkin ]
          julien.fritsch Julien Fritsch made changes -
          Fix Version/s 10.7 [ 24805 ]
          julien.fritsch Julien Fritsch made changes -
          Fix Version/s 10.9 [ 26905 ]
          Elkin Andrei Elkin made changes -
          Assignee Andrei Elkin [ elkin ] Brandon Nesterenko [ JIRAUSER48702 ]
          bnestere Brandon Nesterenko made changes -
          Status Open [ 1 ] In Progress [ 3 ]
          julien.fritsch Julien Fritsch made changes -
          Fix Version/s 11.0 [ 28320 ]
          JIraAutomate JiraAutomate made changes -
          Status In Progress [ 3 ] Stalled [ 10000 ]
          bnestere Brandon Nesterenko made changes -
          Assignee Brandon Nesterenko [ JIRAUSER48702 ] Dave Gosselin [ JIRAUSER52216 ]
          julien.fritsch Julien Fritsch made changes -
          Fix Version/s 10.4 [ 22408 ]
          julien.fritsch Julien Fritsch made changes -
          Fix Version/s 11.1 [ 28549 ]
          Gosselin Dave Gosselin made changes -
          Status Stalled [ 10000 ] In Progress [ 3 ]
          Gosselin Dave Gosselin made changes -
          Assignee Dave Gosselin [ JIRAUSER52216 ] Andrei Elkin [ elkin ]
          Status In Progress [ 3 ] In Review [ 10002 ]
          Elkin Andrei Elkin made changes -
          Assignee Andrei Elkin [ elkin ] Dave Gosselin [ JIRAUSER52216 ]
          Status In Review [ 10002 ] Stalled [ 10000 ]
          Gosselin Dave Gosselin made changes -
          Status Stalled [ 10000 ] In Progress [ 3 ]
          Gosselin Dave Gosselin made changes -
          Assignee Dave Gosselin [ JIRAUSER52216 ] Andrei Elkin [ elkin ]
          Status In Progress [ 3 ] In Review [ 10002 ]
          Gosselin Dave Gosselin made changes -
          Fix Version/s 10.5.27 [ 29902 ]
          Fix Version/s 10.5 [ 23123 ]
          Fix Version/s 10.6 [ 24028 ]
          Fix Version/s 10.11 [ 27614 ]
          Fix Version/s 11.2 [ 28603 ]
          Resolution Fixed [ 1 ]
          Status In Review [ 10002 ] Closed [ 6 ]
          JIraAutomate JiraAutomate made changes -
          Fix Version/s 10.6.20 [ 29903 ]
          Fix Version/s 10.11.10 [ 29904 ]
          Fix Version/s 11.2.6 [ 29906 ]
          Fix Version/s 11.4.4 [ 29907 ]

          People

            Elkin Andrei Elkin
            bar Alexander Barkov
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Git Integration

                Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.