summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKristian Nielsen <knielsen@knielsen-hq.org>2017-01-17 12:24:55 +0100
committerKristian Nielsen <knielsen@knielsen-hq.org>2017-01-17 12:24:55 +0100
commit3e589d4b8edf3d435a44cf71419a8355fe284f8e (patch)
treecaf7a3b07a6be4470a98c0d3bb2f825e6195647f
parent66744f4540c464413055a79111c34449e8381618 (diff)
downloadmariadb-git-3e589d4b8edf3d435a44cf71419a8355fe284f8e.tar.gz
MDEV-11811: dual master with parallel replication memory leak in write master
Gtid_list_log_event::do_apply_event() did not free_root(thd->mem_root). It can allocate on this in record_gtid(), and in some scenarios there is nothing else that does free_root(), leading to temporary memory leak until stop of SQL thread. One scenario is in circular replication with only one master active. The active master receives only its own events on the slave, all of which are ignored. But whenever the SQL thread catches up with the IO thread, a Gtid_list_log_event is applied, leading to the leak.
-rw-r--r--sql/log_event.cc1
1 files changed, 1 insertions, 0 deletions
diff --git a/sql/log_event.cc b/sql/log_event.cc
index d311297f8a8..14f6bb20b47 100644
--- a/sql/log_event.cc
+++ b/sql/log_event.cc
@@ -6915,6 +6915,7 @@ Gtid_list_log_event::do_apply_event(rpl_group_info *rgi)
rli->abort_slave= true;
rli->stop_for_until= true;
}
+ free_root(thd->mem_root, MYF(MY_KEEP_PREALLOC));
return ret;
}