github.com/cellofellow/gopkg@v0.0.0-20140722061823-eec0544a62ad/database/leveldb/src/patch/issue185.patch (about) 1 db/c.cc | 5 ++++- 2 include/leveldb/c.h | 1 + 3 2 files changed, 5 insertions(+), 1 deletion(-) 4 5 diff --git a/db/c.cc b/db/c.cc 6 index 08ff0ad..ec9e05b 100644 7 --- a/db/c.cc 8 +++ b/db/c.cc 9 @@ -92,6 +92,7 @@ struct leveldb_filterpolicy_t : public FilterPolicy { 10 const char* const* key_array, const size_t* key_length_array, 11 int num_keys, 12 size_t* filter_length); 13 + void (*free_)(void*); 14 unsigned char (*key_match_)( 15 void*, 16 const char* key, size_t length, 17 @@ -115,7 +116,7 @@ struct leveldb_filterpolicy_t : public FilterPolicy { 18 size_t len; 19 char* filter = (*create_)(state_, &key_pointers[0], &key_sizes[0], n, &len); 20 dst->append(filter, len); 21 - free(filter); 22 + (*free_)(filter); 23 } 24 25 virtual bool KeyMayMatch(const Slice& key, const Slice& filter) const { 26 @@ -478,6 +479,7 @@ leveldb_filterpolicy_t* leveldb_filterpolicy_create( 27 const char* const* key_array, const size_t* key_length_array, 28 int num_keys, 29 size_t* filter_length), 30 + void (*free_filter)(void*), 31 unsigned char (*key_may_match)( 32 void*, 33 const char* key, size_t length, 34 @@ -487,6 +489,7 @@ leveldb_filterpolicy_t* leveldb_filterpolicy_create( 35 result->state_ = state; 36 result->destructor_ = destructor; 37 result->create_ = create_filter; 38 + result->free_ = free_filter; 39 result->key_match_ = key_may_match; 40 result->name_ = name; 41 return result; 42 diff --git a/include/leveldb/c.h b/include/leveldb/c.h 43 index 1fa5886..9d1921b 100644 44 --- a/include/leveldb/c.h 45 +++ b/include/leveldb/c.h 46 @@ -229,6 +229,7 @@ extern leveldb_filterpolicy_t* leveldb_filterpolicy_create( 47 const char* const* key_array, const size_t* key_length_array, 48 int num_keys, 49 size_t* filter_length), 50 + void (*free_filter)(void*), 51 unsigned char (*key_may_match)( 52 void*, 53 const char* key, size_t length,