summaryrefslogtreecommitdiff
path: root/storage/innobase/fil
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2017-05-09 13:40:42 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2017-05-09 13:40:42 +0300
commit2645bda5f20ab10bc26dc1cb69f91b5505c1faae (patch)
treedf27fc5dbac815f1258a34399c39c2ac82e71a22 /storage/innobase/fil
parent56b3bcc8127c90f63bd33847f8a5a02fd78e4682 (diff)
downloadmariadb-git-2645bda5f20ab10bc26dc1cb69f91b5505c1faae.tar.gz
MDEV-12253 post-fix: Do not leak memory in crash recovery
This fixes the cmake -DWITH_ASAN test failure that was mentioned in commit f9cc391863ab962e8c8a8a8a676d730498eb8d6f (merging MDEV-12253 from 10.1 to 10.2). fil_parse_write_crypt_data(): If the tablespace is not found, invoke fil_space_destroy_crypt_data(&crypt_data) to properly free the created object. With this, the test encryption.innodb-redo-badkey still reports "Missing MLOG_FILE_NAME or MLOG_FILE_DELETE before MLOG_CHECKPOINT" but does not fail. The misleading message should be corrected, maybe as part of MDEV-12699.
Diffstat (limited to 'storage/innobase/fil')
-rw-r--r--storage/innobase/fil/fil0crypt.cc16
1 files changed, 8 insertions, 8 deletions
diff --git a/storage/innobase/fil/fil0crypt.cc b/storage/innobase/fil/fil0crypt.cc
index 7f35e86bbc8..c7d740bc6af 100644
--- a/storage/innobase/fil/fil0crypt.cc
+++ b/storage/innobase/fil/fil0crypt.cc
@@ -502,16 +502,16 @@ fil_parse_write_crypt_data(
ptr += len;
/* update fil_space memory cache with crypt_data */
- fil_space_t* space = fil_space_acquire_silent(space_id);
-
- if (space) {
+ if (fil_space_t* space = fil_space_acquire_silent(space_id)) {
crypt_data = fil_space_set_crypt_data(space, crypt_data);
fil_space_release(space);
- }
-
- /* Check is used key found from encryption plugin */
- if (crypt_data->should_encrypt() && !crypt_data->is_key_found()) {
- *err = DB_DECRYPTION_FAILED;
+ /* Check is used key found from encryption plugin */
+ if (crypt_data->should_encrypt()
+ && !crypt_data->is_key_found()) {
+ *err = DB_DECRYPTION_FAILED;
+ }
+ } else {
+ fil_space_destroy_crypt_data(&crypt_data);
}
return ptr;