Skip to content

0.5.209: a waitForServices timeout is thrown on the main thread and kills the app (Android FATAL EXCEPTION; iOS SIGABRT) after the run-without-AI re-point #47

Description

@emooreatx

Android, ciris-client 0.5.209 + ciris-server 0.5.203, run #34228782947, live-qa-linux-androidlogs/android-logcat.txt, pid 5838:

13:15:48.414  E AndroidRuntime: FATAL EXCEPTION: main
              Process: ai.ciris.mobile.debug, PID: 5838
              java.lang.Exception: Timeout waiting for services (10/22 online)
                at ai.ciris.mobile.shared.viewmodels.StartupViewModel.waitForServices(StartupViewModel.kt:417)
                at ai.ciris.mobile.shared.viewmodels.StartupViewModel$waitForServices$1.invokeSuspend(Unknown Source:14)
                at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:101)
                at android.os.Handler.handleCallback(Handler.java:958)
                …
              Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@216a3c5, Dispatchers.Main.immediate]
13:15:48.473  ActivityManager: Process ai.ciris.mobile.debug (pid 5838) has died: fg  TOP

A waitForServices timeout is raised as a plain Exception inside a coroutine on Dispatchers.Main.immediate with no handler, so it reaches the main thread and the process dies. Context: this is the no-AI session, after the client correctly re-pointed to the node on :4243 (0.5.209's #43 fix) — a node has no 22 agent services to wait for, so the count never arrives and the wait times out. The 10/22 it reports is presumably the last thing the agent showed before it handed off.

iOS, same run, live-qa-macos-ioscmdlogs/ios-oslog.log: pid 33205 polls http://127.0.0.1:8080/v1/system/health and gets Connection refused for roughly a hundred seconds, then

13:19:10  launchd_sim: UIKitApplication:ai.ciris.mobile [33205]: exited due to SIGABRT | sent by iosApp[33205], ran for 102558ms

A self-sent SIGABRT is what an uncaught Kotlin/Native exception looks like, and the timing matches a services wait giving up — but the Kotlin-side text does not reach oslog, so I am presenting iOS as corroboration rather than the same trace. The consequence on iOS is worse than Android's: nothing restarts the app, so our next leg found no test server at all (no /health from :9091 within 120s).

What I would expect, without prescribing: a services-wait timeout is a UI state ("still starting", "could not reach the agent"), never a throw that escapes the coroutine; and on a run-without-AI install the wait should not be counting agent services in the first place — the backend is a node, and its readiness is /v1/identity (or whatever ActiveBackend names), not 22 services.

This is the third hand-off behaviour after the two on #43, and unlike those it ends the process. On desktop the same wait presumably exists but the app survives; on the phones it is fatal.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions