diff options
| author | blasty <blasty@local> | 2026-08-06 23:07:43 +0200 |
|---|---|---|
| committer | blasty <blasty@local> | 2026-08-06 23:07:43 +0200 |
| commit | f898350818062ccde209657632537d0d11bbdafa (patch) | |
| tree | b7603ec189e16f22d62253c9fa984b8f56c70e37 /experiments/cfg_dump.py | |
| parent | app: lift database edits out of IdaTui, and one prompt abstraction (diff) | |
| download | ida-tui-f898350818062ccde209657632537d0d11bbdafa.tar.gz ida-tui-f898350818062ccde209657632537d0d11bbdafa.tar.xz ida-tui-f898350818062ccde209657632537d0d11bbdafa.zip | |
split: stop the resync loop that spun the worker forever
_split_range is the min/max of the decomp_map's addresses, which does not cover
every address in the function -- Hex-Rays doesn't attribute them all. An anchor
inside the loaded function but outside that span therefore asked _sync_split for
a resync, _apply_resync found the function already decompiled, called
_sync_split again, and it asked again. One thread worker and one lookup_funcs
round trip per iteration, for as long as the cursor sat there.
Measured in the pilot: 23,888 function_of calls in one scenario across FOUR
distinct addresses, 21,156 of them for 0x2060 alone. In the live app that is an
idle split view pegging the worker.
_sync_split grows a resync flag; the one caller that is itself the resync passes
resync=False, so the branch can be entered at most once per chain.
While measuring, three scenarios waited on "fail" appearing in the status --
the app says "cannot decompile". decomp_fallback burned its full 25s timeout and
then passed a check on _active == "listing", which was already true before Tab
was pressed: it asserted nothing, slowly. Now waits for the real text and checks
that the fallback actually said something.
scenarios 115.8s -> 74.9s, suite 195.7s -> 153.3s, 732 checks green.
Not included: a range cache for function_of. It broke graph_minimap (the graph
stopped loading at all -- the 65s was that scenario's own 60s wait timing out)
and with the loop gone it buys little. Left out rather than shipped
half-understood.
Diffstat (limited to 'experiments/cfg_dump.py')
0 files changed, 0 insertions, 0 deletions
