diff options
author | zhizhin <zhizhin@yandex-team.com> | 2022-08-23 13:35:29 +0300 |
---|---|---|
committer | zhizhin <zhizhin@yandex-team.com> | 2022-08-23 13:35:29 +0300 |
commit | e200c8e2aa45d15f672a8ea2029e39a9f1620e6a (patch) | |
tree | 31ce657d8ebe03a8a64895769ec26e27d1be6c11 /contrib/tools/flex-old/sym.c | |
parent | 95330412936b4d7ccae8ad4e9870ecf21f0ec220 (diff) | |
download | ydb-e200c8e2aa45d15f672a8ea2029e39a9f1620e6a.tar.gz |
Avoid unnecessary copies when visiting yson graph
При вызове лямбды происходит деаллокация большого числа TNode. Они деаллоцируются внутри
лямбд так как лямбды принимают `const std::pair<TString, TNode>&`, а
`THashMap` итерирует по `const std::pair<const TString, TNode>&`
Меняю явный тип на `const auto&`.
Предыстория:
После перехода на TC Malloc начали в сервере ловить странные кордампы
при десериализации YSON в строку.
Пример дампа: https://coredumps.n.yandex-team.ru/core_trace?core_id=47595674
Вот как вызывали: https://a.yandex-team.ru/arcadia/voicetech/library/asr_logs/message_logger.cpp?rev=rXXXXXX#L161
Вычитка кода показала, что переменная EngineInfo всегда валидная (ссылка
на константную глобальную переменную, которая жива всегда во время
работы программы).
В кордампе заметили деаллокации внутри этих лямбд и поняли, что происходят ненужные копирования.
Предполагаем, что деаллокации внутри YSON могут быть причиной кордампов.
Diffstat (limited to 'contrib/tools/flex-old/sym.c')
0 files changed, 0 insertions, 0 deletions