From 8a03935f8c3fa68b2a7a4c47dff8bda759081626 Mon Sep 17 00:00:00 2001 From: Igor Canadi Date: Mon, 7 Jul 2014 14:41:54 -0700 Subject: [PATCH] Fix valgrind error in c_test Summary: External contribution caused some valgrind errors: https://github.com/facebook/rocksdb/commit/1a34aaaef0900785c2de7e55b55d8c48d1201300 This diff fixes them Test Plan: ran valgrind Reviewers: sdong, yhchiang, ljin Reviewed By: ljin Subscribers: leveldb Differential Revision: https://reviews.facebook.net/D19485 --- db/c.cc | 13 ++++++++++--- db/c_test.c | 10 ++++++---- include/rocksdb/c.h | 9 +++++---- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/db/c.cc b/db/c.cc index f65285f2c8..452478ec5b 100644 --- a/db/c.cc +++ b/db/c.cc @@ -428,8 +428,8 @@ rocksdb_t* rocksdb_open_column_families( const rocksdb_options_t* db_options, const char* name, int num_column_families, - const char** column_family_names, - const rocksdb_options_t** column_family_options, + const char** column_family_names, + const rocksdb_options_t** column_family_options, rocksdb_column_family_handle_t** column_family_handles, char** errptr) { std::vector column_families; @@ -461,7 +461,7 @@ rocksdb_t* rocksdb_open_for_read_only_column_families( const char* name, int num_column_families, const char** column_family_names, - const rocksdb_options_t** column_family_options, + const rocksdb_options_t** column_family_options, rocksdb_column_family_handle_t** column_family_handles, unsigned char error_if_log_file_exist, char** errptr) { @@ -507,6 +507,13 @@ char** rocksdb_list_column_families( return column_families; } +void rocksdb_list_column_families_destroy(char** list, size_t len) { + for (size_t i = 0; i < len; ++i) { + free(output[i]); + } + free(output); +} + rocksdb_column_family_handle_t* rocksdb_create_column_family( rocksdb_t* db, const rocksdb_options_t* column_family_options, diff --git a/db/c_test.c b/db/c_test.c index 1cc0a65cf8..ff8c7da0b0 100644 --- a/db/c_test.c +++ b/db/c_test.c @@ -580,9 +580,10 @@ int main(int argc, char** argv) { CheckEqual("default", column_fams[0], 7); CheckEqual("cf1", column_fams[1], 3); CheckCondition(cflen == 2); + rocksdb_list_column_families_destroy(column_fams, cflen); rocksdb_options_t* cf_options = rocksdb_options_create(); - + const char* cf_names[2] = {"default", "cf1"}; const rocksdb_options_t* cf_opts[2] = {cf_options, cf_options}; rocksdb_column_family_handle_t* handles[2]; @@ -631,14 +632,15 @@ int main(int argc, char** argv) { for (i = 0; i < 2; i++) { rocksdb_column_family_handle_destroy(handles[i]); } + rocksdb_close(db); + rocksdb_destroy_db(options, dbname, &err); + rocksdb_options_destroy(db_options); + rocksdb_options_destroy(cf_options); } StartPhase("prefix"); { // Create new database - rocksdb_close(db); - rocksdb_destroy_db(options, dbname, &err); - rocksdb_filterpolicy_t* policy = rocksdb_filterpolicy_create_bloom(10); rocksdb_options_set_filter_policy(options, policy); rocksdb_options_set_prefix_extractor(options, rocksdb_slicetransform_create_fixed_prefix(3)); diff --git a/include/rocksdb/c.h b/include/rocksdb/c.h index 65992e9677..4aac3466aa 100644 --- a/include/rocksdb/c.h +++ b/include/rocksdb/c.h @@ -99,8 +99,8 @@ extern rocksdb_t* rocksdb_open_column_families( const rocksdb_options_t* options, const char* name, int num_column_families, - const char** column_family_names, - const rocksdb_options_t** column_family_options, + const char** column_family_names, + const rocksdb_options_t** column_family_options, rocksdb_column_family_handle_t** column_family_handles, char** errptr); @@ -108,8 +108,8 @@ extern rocksdb_t* rocksdb_open_for_read_only_column_families( const rocksdb_options_t* options, const char* name, int num_column_families, - const char** column_family_names, - const rocksdb_options_t** column_family_options, + const char** column_family_names, + const rocksdb_options_t** column_family_options, rocksdb_column_family_handle_t** column_family_handles, unsigned char error_if_log_file_exist, char** errptr); @@ -119,6 +119,7 @@ char** rocksdb_list_column_families( const char* name, size_t* lencf, char** errptr); +void rocksdb_list_column_families_destroy(char** list, size_t len); extern rocksdb_column_family_handle_t* rocksdb_create_column_family( rocksdb_t* db,