summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeir Storli <geirst@verizonmedia.com>2020-06-15 13:31:54 +0000
committerGeir Storli <geirst@verizonmedia.com>2020-06-15 13:31:54 +0000
commita507d071f8c5f5922351e55fc23a7b12ab9c3968 (patch)
tree560c3eccfbbe1e1e209431dcd2d114c4dd6c7db1
parentb17ee23a6fd3c81ffc5ca8505b74ac922a6f6165 (diff)
Avoid deadlock if field value is not set in two phase put.
-rw-r--r--searchcore/src/vespa/searchcore/proton/attribute/attribute_writer.cpp8
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);
}
}