mirror of
https://github.com/ton-blockchain/ton
synced 2025-03-09 15:40:10 +00:00
Fix undefined order of clone and move in check_external_message (#381)
* Set precise order of clone and move * remove excessive copying * Fix forgotten return Co-authored-by: dungeon-master-666 <dungeon666master@protonmail.com>
This commit is contained in:
parent
db3619ed31
commit
7dbc294e74
1 changed files with 8 additions and 6 deletions
|
@ -458,18 +458,20 @@ void LiteQuery::continue_getZeroState(BlockIdExt blkid, td::BufferSlice state) {
|
||||||
|
|
||||||
void LiteQuery::perform_sendMessage(td::BufferSlice data) {
|
void LiteQuery::perform_sendMessage(td::BufferSlice data) {
|
||||||
LOG(INFO) << "started a sendMessage(<" << data.size() << " bytes>) liteserver query";
|
LOG(INFO) << "started a sendMessage(<" << data.size() << " bytes>) liteserver query";
|
||||||
td::actor::send_closure_later(
|
auto copy = data.clone();
|
||||||
manager_, &ValidatorManager::check_external_message, data.clone(),
|
td::actor::send_closure_later(
|
||||||
[Self = actor_id(this), data = std::move(data), manager = manager_](td::Result<td::Unit> res) {
|
manager_, &ValidatorManager::check_external_message, std::move(copy),
|
||||||
|
[Self = actor_id(this), data = std::move(data), manager = manager_](td::Result<td::Unit> res) mutable {
|
||||||
if(res.is_error()) {
|
if(res.is_error()) {
|
||||||
td::actor::send_closure(Self, &LiteQuery::abort_query,
|
td::actor::send_closure(Self, &LiteQuery::abort_query,
|
||||||
res.move_as_error_prefix("cannot apply external message to current state : "s));
|
res.move_as_error_prefix("cannot apply external message to current state : "s));
|
||||||
} else {
|
} else {
|
||||||
auto crm = ton::validator::create_ext_message(data.clone());
|
auto crm = ton::validator::create_ext_message(std::move(data));
|
||||||
if (crm.is_error()) {
|
if (crm.is_error()) {
|
||||||
//UNREACHABLE, checks in check_external_message,
|
//UNREACHABLE, checks in check_external_message,
|
||||||
td::actor::send_closure(Self, &LiteQuery::abort_query,
|
td::actor::send_closure(Self, &LiteQuery::abort_query,
|
||||||
crm.move_as_error());
|
crm.move_as_error());
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
LOG(INFO) << "sending an external message to validator manager";
|
LOG(INFO) << "sending an external message to validator manager";
|
||||||
td::actor::send_closure_later(manager, &ValidatorManager::send_external_message, crm.move_as_ok());
|
td::actor::send_closure_later(manager, &ValidatorManager::send_external_message, crm.move_as_ok());
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue