aboutsummaryrefslogtreecommitdiffstats
path: root/searchcore/src
diff options
context:
space:
mode:
authorGeir Storli <geirst@verizonmedia.com>2020-06-15 13:31:54 +0000
committerGeir Storli <geirst@verizonmedia.com>2020-06-17 13:18:29 +0000
commit41f8e26a6e9faba8713b6c4c9d9c3f8990c7ef40 (patch)
tree61cde9cd1e3f8121aee9941740fdc02108a4a960 /searchcore/src
parent5dc622f861d2a3cbca517e8e2b9f0ae59b686da6 (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.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);
}
}