diff options
author | unknown <knielsen@knielsen-hq.org> | 2014-03-07 12:02:09 +0100 |
---|---|---|
committer | unknown <knielsen@knielsen-hq.org> | 2014-03-07 12:02:09 +0100 |
commit | 2aa619ec68ae2aed567433ae37905eb7fe58fb70 (patch) | |
tree | 946ed1bcc07b2ec1ab6a19e03dd9afe167238387 /sql/rpl_parallel.cc | |
parent | fe3c68b38df1a9bd52fc27b9b05eb200d9e8bfc9 (diff) | |
download | mariadb-git-2aa619ec68ae2aed567433ae37905eb7fe58fb70.tar.gz |
MDEV-5788: Incorrect free of rgi->deferred_events in parallel replication
When an rpl_group_info object was returned from the free list, the
rgi->deferred_events_collecting and rgi->deferred_events was not correctly
re-inited. Additionally, the rgi->deferred_events was incorrectly freed in
free_rgi(), which causes unnecessary malloc/free (or crash when re-init is not
done).
Thanks to user nanyi607rao, who reported this bug on maria-developers@.
Diffstat (limited to 'sql/rpl_parallel.cc')
-rw-r--r-- | sql/rpl_parallel.cc | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/sql/rpl_parallel.cc b/sql/rpl_parallel.cc index 154a95c1028..58b4948baae 100644 --- a/sql/rpl_parallel.cc +++ b/sql/rpl_parallel.cc @@ -789,9 +789,10 @@ rpl_parallel_thread::get_rgi(Relay_log_info *rli, Gtid_log_event *gtid_ev, return NULL; } rgi->is_parallel_exec = true; - if ((rgi->deferred_events_collecting= rli->mi->rpl_filter->is_on())) - rgi->deferred_events= new Deferred_log_events(rli); } + if ((rgi->deferred_events_collecting= rli->mi->rpl_filter->is_on()) && + !rgi->deferred_events) + rgi->deferred_events= new Deferred_log_events(rli); if (event_group_new_gtid(rgi, gtid_ev)) { free_rgi(rgi); @@ -810,11 +811,6 @@ rpl_parallel_thread::free_rgi(rpl_group_info *rgi) mysql_mutex_assert_owner(&LOCK_rpl_thread); DBUG_ASSERT(rgi->commit_orderer.waitee == NULL); rgi->free_annotate_event(); - if (rgi->deferred_events) - { - delete rgi->deferred_events; - rgi->deferred_events= NULL; - } rgi->next= rgi_free_list; rgi_free_list= rgi; } |