db_(db),
iter_(iter) { }
+ ~LeveldbState() {
+ // This order is very important.
+ // Iterators must be destroyed before their associated DB
+ // is destroyed.
+ iter_.reset();
+ db_.reset();
+ }
+
shared_ptr<DatabaseState> clone() {
shared_ptr<leveldb::Iterator> new_iter;
DataLayer<Dtype>::~DataLayer<Dtype>() {
this->JoinPrefetchThread();
// clean up the database resources
-
- // Very important to invalidate iterators before closing the database.
- // TODO(kmatzen): Figure out a better design to avoid this.
- iter_ = database_->end();
database_->close();
}
EXPECT_TRUE(database->end() == iter3);
- iter1 = database->end();
- iter2 = database->end();
- iter3 = database->end();
-
database->close();
}
EXPECT_TRUE(this->BufferEq(iter3->key, key2));
EXPECT_TRUE(database->end() == iter1);
- iter1 = database->end();
- iter2 = database->end();
- iter3 = database->end();
-
database->close();
}
EXPECT_TRUE(database->end() == iter3);
- iter1 = database->end();
- iter2 = database->end();
- iter3 = database->end();
-
database->close();
}
EXPECT_TRUE(this->BufferEq(iter3->key, key2));
EXPECT_TRUE(database->end() == iter1);
- iter1 = database->end();
- iter2 = database->end();
- iter3 = database->end();
-
database->close();
}
Database::const_iterator iter = database->begin();
const Database::buffer_t& first_blob = iter->value;
datum.ParseFromArray(first_blob.data(), first_blob.size());
- iter = database->end();
sum_blob.set_num(1);
sum_blob.set_channels(datum.channels());