Skip to content

Commit e55b3c0

Browse files
committed
Fixing ref-counting memtables
1 parent 983fafa commit e55b3c0

File tree

2 files changed

+8
-4
lines changed

2 files changed

+8
-4
lines changed

db/memtablelist.cc

+7-3
Original file line numberDiff line numberDiff line change
@@ -76,17 +76,16 @@ void MemTableListVersion::AddIterators(const ReadOptions& options,
7676
}
7777
}
7878

79+
// caller is responsible for referencing m
7980
void MemTableListVersion::Add(MemTable* m) {
8081
assert(refs_ == 1); // only when refs_ == 1 is MemTableListVersion mutable
81-
m->Ref();
8282
memlist_.push_front(m);
8383
++size_;
8484
}
8585

86+
// caller is responsible for unreferencing m
8687
void MemTableListVersion::Remove(MemTable* m) {
8788
assert(refs_ == 1); // only when refs_ == 1 is MemTableListVersion mutable
88-
MemTable* x __attribute__((unused)) = m->Unref();
89-
assert(x == nullptr); // it still needs to be alive!
9089
memlist_.remove(m);
9190
--size_;
9291
}
@@ -232,6 +231,11 @@ Status MemTableList::InstallMemtableFlushResults(
232231
void MemTableList::Add(MemTable* m) {
233232
assert(current_->size_ >= num_flush_not_started_);
234233
InstallNewVersion();
234+
// this method is used to move mutable memtable into an immutable list.
235+
// since mutable memtable is already refcounted by the DBImpl,
236+
// and when moving to the imutable list we don't unref it,
237+
// we don't have to ref the memtable here. we just take over the
238+
// reference from the DBImpl.
235239
current_->Add(m);
236240
m->MarkImmutable();
237241
num_flush_not_started_++;

db/memtablelist.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,12 @@ class MemTableListVersion {
4040
void AddIterators(const ReadOptions& options,
4141
std::vector<Iterator*>* iterator_list);
4242

43+
private:
4344
// REQUIRE: m is mutable memtable
4445
void Add(MemTable* m);
4546
// REQUIRE: m is mutable memtable
4647
void Remove(MemTable* m);
4748

48-
private:
4949
friend class MemTableList;
5050
std::list<MemTable*> memlist_;
5151
int size_ = 0;

0 commit comments

Comments
 (0)