diff options
author | Geir Storli <geirst@verizonmedia.com> | 2020-06-15 13:31:54 +0000 |
---|---|---|
committer | Geir Storli <geirst@verizonmedia.com> | 2020-06-15 13:31:54 +0000 |
commit | a507d071f8c5f5922351e55fc23a7b12ab9c3968 (patch) | |
tree | 560c3eccfbbe1e1e209431dcd2d114c4dd6c7db1 | |
parent | b17ee23a6fd3c81ffc5ca8505b74ac922a6f6165 (diff) |
Avoid deadlock if field value is not set in two phase put.
-rw-r--r-- | searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp b/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp index 07dfbc1eac7..8f19d5c203b 100644 --- a/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp +++ b/searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp @@ -146,13 +146,14 @@ complete_put_to_attribute(SerialNum serial_num, uint32_t docid, AttributeVector& attr, const FieldValue::SP& field_value, - std::unique_ptr<PrepareResult> prepare_result, + std::future<std::unique_ptr<PrepareResult>>& result_future, bool immediate_commit, AttributeWriter::OnWriteDoneType) { ensureLidSpace(serial_num, docid, attr); if (field_value.get()) { - AttributeUpdater::complete_set_value(attr, docid, *field_value, std::move(prepare_result)); + auto result = result_future.get(); + AttributeUpdater::complete_set_value(attr, docid, *field_value, std::move(result)); } else { attr.clearDoc(docid); } @@ -440,8 +441,7 @@ void CompletePutTask::run() { if (_attr.getStatus().getLastSyncToken() < _serial_num) { - auto result = _result_future.get(); - complete_put_to_attribute(_serial_num, _docid, _attr, _field_value, std::move(result), + complete_put_to_attribute(_serial_num, _docid, _attr, _field_value, _result_future, _immediate_commit, _on_write_done); } } |