Page MenuHomePhabricator

rpc: Reduce Univalue push_backV peak memory usage in listtransactions
ClosedPublic

Authored by Fabien on Jun 5 2024, 08:07.

Details

Summary
Currently the RPC will have the same data stored thrice:
 - UniValue ret (memory filled by ListTransactions)
 - std::vector<UniValue> vec (constructed by calling push_backV)
 - UniValue result (the actual result, memory filled by push_backV)

Fix this by filling the memory only once:
 - std::vector<UniValue> ret (memory filled by ListTransactions)
 - Pass iterators to push_backV instead of creating a full copy
 - Move memory into UniValue result instead of copying it

Backport of core#25464.

Test Plan
ninja check-all