From 16d6daba64852bdff940ea898fd2aafaf1ec6cae Mon Sep 17 00:00:00 2001 From: Avi Kivity Date: Thu, 27 Aug 2015 10:26:33 +0300 Subject: [PATCH] mutation_reader: optimize make_reader_returning() make_reader_returning() is used by the single-key query path, and is slowed down by needlessly allocating a vector, which is initialized by copying the mutation (as initializer_list<> can not be moved from). Fix by giving it its own implementation instead of relying on make_reader_returning_many(). --- mutation_reader.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/mutation_reader.cc b/mutation_reader.cc index 48d3e18b34..bd75bc4b23 100644 --- a/mutation_reader.cc +++ b/mutation_reader.cc @@ -158,7 +158,14 @@ make_lazy_reader(std::function make_reader) { } mutation_reader make_reader_returning(mutation m) { - return make_reader_returning_many({std::move(m)}); + return [m = std::move(m), done = false] () mutable { + if (done) { + return make_ready_future(); + } else { + done = true; + return make_ready_future(std::move(m)); + } + }; } mutation_reader make_reader_returning_many(std::vector mutations) {