diff options
author | Geir Storli <geirst@verizonmedia.com> | 2020-06-15 13:31:54 +0000 |
---|---|---|
committer | Geir Storli <geirst@verizonmedia.com> | 2020-06-17 13:18:29 +0000 |
commit | 41f8e26a6e9faba8713b6c4c9d9c3f8990c7ef40 (patch) | |
tree | 61cde9cd1e3f8121aee9941740fdc02108a4a960 /searchcore/src | |
parent | 5dc622f861d2a3cbca517e8e2b9f0ae59b686da6 (diff) |
Avoid deadlock if field value is not set in two phase put.
Diffstat (limited to 'searchcore/src')
-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); } } |