diff options
author | Sergei Petrunia <psergey@askmonty.org> | 2017-07-24 15:41:17 +0300 |
---|---|---|
committer | Sergei Petrunia <psergey@askmonty.org> | 2017-07-28 13:22:28 +0000 |
commit | 488f46f3de51070fa91e5eadcc215b6a4e343f7b (patch) | |
tree | 93a04cf6f2f82701a8e62525660a1bf34e821715 /sql | |
parent | 8c0129dc324d7ef1aa1642bd297c521f20285d25 (diff) | |
download | mariadb-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.cc | 6 |
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; |