Skip to content

WIP: go startup fixes#29363

Open
chrisnojima wants to merge 2 commits into
masterfrom
nojima/HOTPOT-bind-cleanup
Open

WIP: go startup fixes#29363
chrisnojima wants to merge 2 commits into
masterfrom
nojima/HOTPOT-bind-cleanup

Conversation

@chrisnojima

Copy link
Copy Markdown
Contributor

fix(bind): close BackgroundSync appstate races; harden gomobile API

  • BackgroundSync: use UpdateWithCheck for both transitions so a concurrent FOREGROUND can't be clobbered back to BACKGROUND, which cancelled live RPCs and stranded the service backgrounded while the user was in the app; inline the pointless goroutine/channel wrapper
  • ReadArr: deliver data when n>0 even with err (net.Conn contract)
  • LogSend/ForceGC/LogToService/InitOnce: guard against pre-Init calls
  • collapse dead iOS/Android buffer branch (both computed 300*1024) and drop the discarded 1MB package-level allocation
  • stop leaked ticker, lock conn read in NotifyJSReady, skip trace on empty logFile, delete commented-out GOMAXPROCS block

- BackgroundSync: use UpdateWithCheck for both transitions so a
  concurrent FOREGROUND can't be clobbered back to BACKGROUND, which
  cancelled live RPCs and stranded the service backgrounded while the
  user was in the app; inline the pointless goroutine/channel wrapper
- ReadArr: deliver data when n>0 even with err (net.Conn contract)
- LogSend/ForceGC/LogToService/InitOnce: guard against pre-Init calls
- collapse dead iOS/Android buffer branch (both computed 300*1024) and
  drop the discarded 1MB package-level allocation
- stop leaked ticker, lock conn read in NotifyJSReady, skip trace on
  empty logFile, delete commented-out GOMAXPROCS block
@chrisnojima chrisnojima requested a review from zoom-ua July 2, 2026 21:51
Users report ~10s hangs on the launch screen. Init runs synchronously
on the native main thread and blocks on leveldb journal replay or
recovery after an unclean kill, and on up to 50 sequential keychain
reads.

- flush leveldb memtables when backgrounding so a jetsam kill leaves
  empty journals; next open skips replay/recovery
- read all keychain slots with one SecItemCopyMatching, slot scan as
  fallback
- run the startup login attempt off the Init path; GetBootstrapStatus
  waits for it so the GUI never sees a stale logged-out state
- log per-phase Init timings for future reports
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.

1 participant