Skip to content

Fix keep-alive crash on non-JIT apps (e.g. Roblox)#8

Merged
dizzafizza merged 1 commit into
mainfrom
claude/keep-alive-banner-fixes-n830n2
Jul 15, 2026
Merged

Fix keep-alive crash on non-JIT apps (e.g. Roblox)#8
dizzafizza merged 1 commit into
mainfrom
claude/keep-alive-banner-fixes-n830n2

Conversation

@dizzafizza

Copy link
Copy Markdown
Owner

Keep-alive ran the universal JIT breakpoint-handler script against every app on TXM devices. That script is meant for apps that use the brk #0xf00d JIT protocol (emulators). Against a large, multi-threaded, non-JIT app like Roblox it chases every signal the app raises — logging verbosely each iteration — which:

  • grows RunJSViewModel.logs (a @published array rendered in a SwiftUI List) without bound until StikDebug runs out of memory and crashes, and
  • mishandles the app's many threads (single-thread vCont), wedging it.

Two fixes:

  • keepAliveScript now returns a script only for user-assigned or name-matched (known JIT) apps. Everything else is held with a plain debugger attach, which keeps the app alive in the background without interfering with its threads or signals. This restores the proven plain-hold path for apps like Roblox.
  • appendLog caps the log buffer (with amortized trimming) so a long-running or spinning hold script can never exhaust memory. The user can still stop such a hold via should_continue().

Claude-Session: https://claude.ai/code/session_01EpCxAimrBo9RA8v6BxSEXT

Summary

Changes

Related Issues

Testing

  • Tested on device
  • Tested with fresh pairing file
  • No regressions in existing functionality

Screenshots

Keep-alive ran the universal JIT breakpoint-handler script against every app on
TXM devices. That script is meant for apps that use the brk #0xf00d JIT protocol
(emulators). Against a large, multi-threaded, non-JIT app like Roblox it chases
every signal the app raises — logging verbosely each iteration — which:
  - grows RunJSViewModel.logs (a @published array rendered in a SwiftUI List)
    without bound until StikDebug runs out of memory and crashes, and
  - mishandles the app's many threads (single-thread vCont), wedging it.

Two fixes:
- keepAliveScript now returns a script only for user-assigned or name-matched
  (known JIT) apps. Everything else is held with a plain debugger attach, which
  keeps the app alive in the background without interfering with its threads or
  signals. This restores the proven plain-hold path for apps like Roblox.
- appendLog caps the log buffer (with amortized trimming) so a long-running or
  spinning hold script can never exhaust memory. The user can still stop such a
  hold via should_continue().

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EpCxAimrBo9RA8v6BxSEXT
@dizzafizza
dizzafizza merged commit b4c84c9 into main Jul 15, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants