summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorSergei Petrunia <psergey@askmonty.org>2017-07-24 15:41:17 +0300
committerSergei Petrunia <psergey@askmonty.org>2017-07-28 13:22:28 +0000
commit488f46f3de51070fa91e5eadcc215b6a4e343f7b (patch)
tree93a04cf6f2f82701a8e62525660a1bf34e821715 /sql
parent8c0129dc324d7ef1aa1642bd297c521f20285d25 (diff)
downloadmariadb-git-488f46f3de51070fa91e5eadcc215b6a4e343f7b.tar.gz
MDEV-13153: Assertion ... failed on partitioned RocksDB table
ha_partition creates temporary ha_XXX objects for its partitions when performing DDL operations. The objects were created on a MEM_ROOT and never deleted. This works as long as ha_XXX objects free all data ha_XXX::close() and don't rely on a proper destructor invocation. Unfortunately, ha_rocksdb includes String members which need to be delete'd properly. Fixed the bug by having ha_partition::~ha_partition delete these temporary objects.
Diffstat (limited to 'sql')
-rw-r--r--sql/ha_partition.cc6
1 files changed, 5 insertions, 1 deletions
diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc
index 2c91dfa0c65..c6ffe679c80 100644
--- a/sql/ha_partition.cc
+++ b/sql/ha_partition.cc
@@ -413,8 +413,12 @@ ha_partition::~ha_partition()
destroy_record_priority_queue();
my_free(m_part_ids_sorted_by_num_of_records);
+ if (m_added_file)
+ {
+ for (handler **ph= m_added_file; *ph; ph++)
+ delete (*ph);
+ }
clear_handler_file();
-
free_root(&m_mem_root, MYF(0));
DBUG_VOID_RETURN;