@@ -158,13 +158,15 @@ DBImpl::~DBImpl() {
158
158
env_->UnlockFile (db_lock_);
159
159
}
160
160
161
+ // delete the cache first in case it has outstanding references
162
+ delete table_cache_;
163
+
161
164
delete versions_;
162
165
if (mem_ != NULL ) mem_->Unref ();
163
166
if (imm_ != NULL ) imm_->Unref ();
164
167
delete tmp_batch_;
165
168
delete log_;
166
169
delete logfile_;
167
- delete table_cache_;
168
170
169
171
if (owns_info_log_) {
170
172
delete options_.info_log ;
@@ -1047,15 +1049,16 @@ Iterator* DBImpl::NewInternalIterator(const ReadOptions& options,
1047
1049
list.push_back (imm_->NewIterator ());
1048
1050
imm_->Ref ();
1049
1051
}
1050
- versions_->current ()->AddIterators (options, &list);
1052
+ Version* current = versions_->current ();
1053
+ current->AddIterators (options, &list);
1051
1054
Iterator* internal_iter =
1052
1055
NewMergingIterator (&internal_comparator_, &list[0 ], list.size ());
1053
- versions_-> current () ->Ref ();
1056
+ current->Ref ();
1054
1057
1055
1058
cleanup->mu = &mutex_;
1056
1059
cleanup->mem = mem_;
1057
1060
cleanup->imm = imm_;
1058
- cleanup->version = versions_-> current () ;
1061
+ cleanup->version = current;
1059
1062
internal_iter->RegisterCleanup (CleanupIteratorState, cleanup, NULL );
1060
1063
1061
1064
*seed = ++seed_;
@@ -1407,8 +1410,8 @@ void DBImpl::GetApproximateSizes(
1407
1410
Version* v;
1408
1411
{
1409
1412
MutexLock l (&mutex_);
1410
- versions_->current ()->Ref ();
1411
1413
v = versions_->current ();
1414
+ v->Ref ();
1412
1415
}
1413
1416
1414
1417
for (int i = 0 ; i < n; i++) {
0 commit comments