aboutsummaryrefslogtreecommitdiffstats
path: root/tests/run.py
diff options
context:
space:
mode:
authorblasty <peter@haxx.in>2026-08-06 23:07:43 +0200
committerblasty <peter@haxx.in>2026-08-06 23:07:43 +0200
commit06f7f7521eec32d906b2d39103f7eb3aad7e13fc (patch)
treecf43fa3aeae9c30f90c55d95a8eb32e7a561b5ed /tests/run.py
parentapp: lift database edits out of IdaTui, and one prompt abstraction (diff)
downloadida-tui-06f7f7521eec32d906b2d39103f7eb3aad7e13fc.tar.gz
ida-tui-06f7f7521eec32d906b2d39103f7eb3aad7e13fc.tar.xz
ida-tui-06f7f7521eec32d906b2d39103f7eb3aad7e13fc.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 'tests/run.py')
0 files changed, 0 insertions, 0 deletions