Skip to content

Commit 7df2ea9

Browse files
authored
Improve async cell loading in DynamicBagOfCellsDb.cpp (#1414)
1 parent fd09540 commit 7df2ea9

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

crypto/vm/db/DynamicBagOfCellsDb.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,14 +111,16 @@ class DynamicBagOfCellsDbImpl : public DynamicBagOfCellsDb, private ExtCellCreat
111111
}
112112
void load_cell_async(td::Slice hash, std::shared_ptr<AsyncExecutor> executor,
113113
td::Promise<Ref<DataCell>> promise) override {
114+
auto promise_ptr = std::make_shared<td::Promise<Ref<DataCell>>>(std::move(promise));
114115
auto info = hash_table_.get_if_exists(hash);
115116
if (info && info->sync_with_db) {
116-
TRY_RESULT_PROMISE(promise, loaded_cell, info->cell->load_cell());
117-
promise.set_result(loaded_cell.data_cell);
117+
executor->execute_async([promise = std::move(promise_ptr), cell = info->cell]() mutable {
118+
TRY_RESULT_PROMISE((*promise), loaded_cell, cell->load_cell());
119+
promise->set_result(loaded_cell.data_cell);
120+
});
118121
return;
119122
}
120123
SimpleExtCellCreator ext_cell_creator(cell_db_reader_);
121-
auto promise_ptr = std::make_shared<td::Promise<Ref<DataCell>>>(std::move(promise));
122124
executor->execute_async(
123125
[executor, loader = *loader_, hash = CellHash::from_slice(hash), db = this,
124126
ext_cell_creator = std::move(ext_cell_creator), promise = std::move(promise_ptr)]() mutable {

0 commit comments

Comments
 (0)