From: Jon Olav Hauglid Date: May 11 2011 8:00am Subject: bzr commit into mysql-trunk branch (jon.hauglid:3392) Bug#12538873 List-Archive: http://lists.mysql.com/commits/137045 X-Bug: 12538873 Message-Id: <201105110800.p4B80C5d030026@acsmt358.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1325680430514242688==" --===============1325680430514242688== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///export/home/x/mysql-trunk-insert_delayed_valgrind/ based on revid:georgi.kodinov@stripped 3392 Jon Olav Hauglid 2011-05-11 Bug#12538873 BINLOG.BINLOG_STM_BINLOG FAILS IN VALGRIND DUE TO INSERT DELAYED The problem was that not all allocated memory was freed when INSERT DELAYED was used with binlogging on. When an instance of the Delayed_insert class is made, it's query string is set to a copy of the table name. The same string is also used for Delayed_insert's TABLE_LIST. The string is later freed in Delayed_insert's destructor. The problem was that the pointer to this string was overwritten during INSERT DELAYED processing if binlogging was on. This caused the original query string to never be freed which caused the Valgrind warning. This was a regression introduced by WL#4033. This patch fixes the problem by changing the Delayed_insert's destructor to instead free the string using the pointer from Delayed_insert's TABLE_LIST. No test case added since the problem is already covered by binlog.binlog_stm_binlog.test running with Valgrind. modified: sql/sql_insert.cc === modified file 'sql/sql_insert.cc' --- a/sql/sql_insert.cc 2011-05-04 07:51:15 +0000 +++ b/sql/sql_insert.cc 2011-05-11 07:59:59 +0000 @@ -1948,7 +1948,7 @@ public: mysql_cond_destroy(&cond); mysql_cond_destroy(&cond_client); thd.unlink(); // Must be unlinked under lock - my_free(thd.query()); + my_free(table_list.table_name); thd.security_ctx->user= thd.security_ctx->host=0; thread_count--; delayed_insert_threads--; @@ -2090,20 +2090,19 @@ bool delayed_get_table(THD *thd, MDL_req mysql_mutex_lock(&LOCK_thread_count); thread_count++; mysql_mutex_unlock(&LOCK_thread_count); + di->table_list= *table_list; // Needed to open table + /* Replace volatile strings with local copies */ di->thd.set_db(table_list->db, (uint) strlen(table_list->db)); - di->thd.set_query(my_strdup(table_list->table_name, - MYF(MY_WME | ME_FATALERROR)), - 0, system_charset_info); + di->table_list.alias= di->table_list.table_name= + my_strdup(table_list->table_name, MYF(MY_WME | ME_FATALERROR)); + di->table_list.db= di->thd.db; + di->thd.set_query(di->table_list.table_name, 0, system_charset_info); if (di->thd.db == NULL || di->thd.query() == NULL) { /* The error is reported */ delete di; goto end_create; } - di->table_list= *table_list; // Needed to open table - /* Replace volatile strings with local copies */ - di->table_list.alias= di->table_list.table_name= di->thd.query(); - di->table_list.db= di->thd.db; /* We need the tickets so that they can be cloned in handle_delayed_insert */ di->grl_protection.init(MDL_key::GLOBAL, "", "", MDL_INTENTION_EXCLUSIVE, MDL_STATEMENT); --===============1325680430514242688== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/jon.hauglid@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: jon.hauglid@stripped # target_branch: file:///export/home/x/mysql-trunk-\ # insert_delayed_valgrind/ # testament_sha1: d4e5dfe53db005a8bfa8bdc5ef15252291ff6855 # timestamp: 2011-05-11 10:00:04 +0200 # base_revision_id: georgi.kodinov@stripped\ # dccrlz780k8960u2 # # Begin bundle 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 --===============1325680430514242688==--