@@ -113,6 +113,7 @@ namespace {
113113
114114namespace ycsbc {
115115
116+ std::vector<rocksdb::ColumnFamilyHandle *> RocksdbDB::cf_handles_;
116117rocksdb::DB *RocksdbDB::db_ = nullptr ;
117118int RocksdbDB::ref_cnt_ = 0 ;
118119std::mutex RocksdbDB::mu_;
@@ -195,7 +196,6 @@ void RocksdbDB::Init() {
195196 rocksdb::Options opt;
196197 opt.create_if_missing = true ;
197198 std::vector<rocksdb::ColumnFamilyDescriptor> cf_descs;
198- std::vector<rocksdb::ColumnFamilyHandle *> cf_handles;
199199 GetOptions (props, &opt, &cf_descs);
200200#ifdef USE_MERGEUPDATE
201201 opt.merge_operator .reset (new YCSBUpdateMerge);
@@ -211,18 +211,24 @@ void RocksdbDB::Init() {
211211 if (cf_descs.empty ()) {
212212 s = rocksdb::DB::Open (opt, db_path, &db_);
213213 } else {
214- s = rocksdb::DB::Open (opt, db_path, cf_descs, &cf_handles , &db_);
214+ s = rocksdb::DB::Open (opt, db_path, cf_descs, &cf_handles_ , &db_);
215215 }
216216 if (!s.ok ()) {
217217 throw utils::Exception (std::string (" RocksDB Open: " ) + s.ToString ());
218218 }
219219}
220220
221- void RocksdbDB::Cleanup () {
221+ void RocksdbDB::Cleanup () {
222222 const std::lock_guard<std::mutex> lock (mu_);
223223 if (--ref_cnt_) {
224224 return ;
225225 }
226+ for (size_t i = 0 ; i < cf_handles_.size (); i++) {
227+ if (cf_handles_[i] != nullptr ) {
228+ delete cf_handles_[i];
229+ cf_handles_[i] = nullptr ;
230+ }
231+ }
226232 delete db_;
227233}
228234
0 commit comments