diff options
author | Henning Baldersheim <balder@oath.com> | 2018-06-11 17:47:56 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@oath.com> | 2018-06-11 17:47:56 +0200 |
commit | 942bc723d7506d3f3c220b9207fc13ddc53d17f5 (patch) | |
tree | b9931326aa56332a2a3600f19d75b335bcb4cc84 /searchcore | |
parent | 6594faf350e5d1b5edc3fa312bdfe96295981c42 (diff) |
Avoid taking the shared_ptr copy cost when not necessary.
Diffstat (limited to 'searchcore')
-rw-r--r-- | searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp b/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp index 1f394cc6b38..b099072d421 100644 --- a/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp +++ b/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp @@ -182,13 +182,12 @@ using AttrUpdates = std::vector<std::pair<AttributeVector *, const FieldUpdate * struct BatchUpdateTask : public vespalib::Executor::Task { - BatchUpdateTask(SerialNum serialNum, DocumentIdT lid, bool immediateCommit, - AttributeWriter::OnWriteDoneType onWriteDone) + BatchUpdateTask(SerialNum serialNum, DocumentIdT lid, bool immediateCommit) : vespalib::Executor::Task(), _serialNum(serialNum), _lid(lid), _immediateCommit(immediateCommit), - _onWriteDone(onWriteDone) + _onWriteDone() { } void run() override { @@ -208,7 +207,7 @@ struct BatchUpdateTask : public vespalib::Executor::Task { DocumentIdT _lid; bool _immediateCommit; AttrUpdates _updates; - std::remove_reference_t<AttributeWriter::OnWriteDoneType> _onWriteDone; + search::IDestructorCallback::SP _onWriteDone; }; class FieldContext @@ -537,7 +536,7 @@ AttributeWriter::update(SerialNum serialNum, const DocumentUpdate &upd, Document uint32_t numExecutors = _attributeFieldWriter.getNumExecutors(); args.reserve(numExecutors); for (uint32_t i(0); i < numExecutors; i++) { - args.emplace_back(std::make_unique<BatchUpdateTask>(serialNum, lid, immediateCommit, onWriteDone)); + args.emplace_back(std::make_unique<BatchUpdateTask>(serialNum, lid, immediateCommit)); args.back()->_updates.reserve((2*upd.getUpdates().size())/numExecutors); } @@ -560,6 +559,7 @@ AttributeWriter::update(SerialNum serialNum, const DocumentUpdate &upd, Document // in a operation done context object. for (uint32_t id(0); id < args.size(); id++) { if ( ! args[id]->_updates.empty()) { + args[id]->_onWriteDone = onWriteDone; _attributeFieldWriter.executeTask(id, std::move(args[id])); } } |