From 3c0d5bd5d6e6aa9660d6b40a65c31be3207e33b8 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Tue, 17 Oct 2017 00:47:30 -0700 Subject: [PATCH] ircd::db: Fix empty row seek; fix potential coherence issue on offload. --- ircd/db.cc | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/ircd/db.cc b/ircd/db.cc index a24b84ea1..0915f5719 100644 --- a/ircd/db.cc +++ b/ircd/db.cc @@ -2331,7 +2331,9 @@ size_t ircd::db::seek(row &r, const pos &p) { - assert(!r.empty()); + if(r.empty()) + return 0; + const column &c(r[0]); const database &d(c); const ircd::timer timer; @@ -3411,16 +3413,18 @@ ircd::db::_seek(database::column &c, return valid(*it); } + const auto it_key + { + valid_it? slice(it->key()) : string_view{} + }; + const auto blocking_it { - _seek_offload(c, opts, [&valid_it, &it, &p] + _seek_offload(c, opts, [&valid_it, &it_key, &p] (rocksdb::Iterator &blocking_it) { if(valid_it) - { - assert(valid(*it)); - _seek_(blocking_it, slice(it->key())); - } + _seek_(blocking_it, it_key); _seek_(blocking_it, p); })