From: sdong Date: Tue, 14 Sep 2021 21:32:24 +0000 (-0700) Subject: Always iniitalize ArenaWrappedDBIter::db_iter_ to nullptr (#8889) X-Git-Tag: v6.25.1~26 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=12d798ac06bcce36be703b057d5f5f4dab3b270c;p=rocksdb.git Always iniitalize ArenaWrappedDBIter::db_iter_ to nullptr (#8889) Summary: ArenaWrappedDBIter::db_iter_ should never be nullptr. However, when debugging a segfault, it's hard to distinguish it is not initialized (not possible) and other corruption. Add this nullptr to help distinguish the case. Pull Request resolved: https://github.com/facebook/rocksdb/pull/8889 Test Plan: Run existing unit tests. Reviewed By: pdillinger Differential Revision: D30814756 fbshipit-source-id: 4b1f36896a33dc203d4f1f424ded9554927d61ba --- diff --git a/db/arena_wrapped_db_iter.h b/db/arena_wrapped_db_iter.h index 17273b201..cdf9046a9 100644 --- a/db/arena_wrapped_db_iter.h +++ b/db/arena_wrapped_db_iter.h @@ -34,7 +34,13 @@ class Version; // the same as the inner DBIter. class ArenaWrappedDBIter : public Iterator { public: - virtual ~ArenaWrappedDBIter() { db_iter_->~DBIter(); } + virtual ~ArenaWrappedDBIter() { + if (db_iter_ != nullptr) { + db_iter_->~DBIter(); + } else { + assert(false); + } + } // Get the arena to be used to allocate memory for DBIter to be wrapped, // as well as child iterators in it. @@ -90,7 +96,7 @@ class ArenaWrappedDBIter : public Iterator { } private: - DBIter* db_iter_; + DBIter* db_iter_ = nullptr; Arena arena_; uint64_t sv_number_; ColumnFamilyData* cfd_ = nullptr;