Repository navigation
test(support): bound recomposer teardown in draft reactivation test - #507
Merged
Merged
Conversation
The reactivation test sent a single frame per step and then waited for the recomposer to become idle without a bound. Apply notifications that arrive on another thread, such as from the desktop global snapshot manager started by earlier UI tests, can resume the recomposer after that frame was sent, so it waits for a frame that never comes. The outer timeout then ran the teardown, where Recomposer.close() does not resume a runner waiting for a frame while an effect is still completing, and the unbounded join hung the test worker. Keep sending frames while recomposition is pending, bound every composition wait with a stage-specific failure, and stop the recomposer with cancel() followed by a bounded join that cancels the runner as a fallback.
obiente-cloud
Bot
temporarily deployed
to
Obiente Preview / PR #507 / NC Native
October 15, 2026 00:38
Destroyed
Obiente previewNC Native · Obiente updates this comment as the preview changes. |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Outcome
Test-only change with no user-visible effect.
SupportSettingsDraftReactivationTestcan no longer hang the desktop test suite.The test drove a manual
Recomposerwith oneBroadcastFrameClockframe per step and then waited for idle without a bound. Earlier desktop UI tests leave Compose's global snapshot manager applying snapshots on the UI dispatcher. That can notify the recomposer after the single frame was sent, so it waits for a frame that never comes. Teardown then calledRecomposer.close()and joined without a bound. In Compose 1.11,close()does not resume a runner that is waiting for a frame while an effect is still completing, so the join never returned.The test now:
cancel()and a bounded join, cancelling the runner as a fallback;Assertions are unchanged.
AdministrationAccessCompositionTest, the only other manualRecomposertest, already sends frames continuously and usescancel(), so it is unchanged.This is the likely cause of an intermittent
:ui:desktopTesthang seen locally and of one Linux CI job timeout. The mechanism and the hang's thread dump match, but the real-suite hang was not caught directly.Verification
Every check relevant to the changed scope passes, or each unrun check is listed below with a reason
bash tools/check-repository.shpassesA new
changes/unreleased/fragment records the changeNo credentials, private server data, machine-local paths, or generated output are included
:ui:desktopTest --rerun --tests '*SupportSettingsDraftReactivationTest': 12 of 12 separate runs passed.Full
:ui:desktopTest :androidApp:testDebugUnitTest(both executed): desktop 3862 tests, 0 failures, 69 skipped; Android 1167 tests, 0 failures.bash tools/check-kotlin-architecture.shandbash tools/check-repository.shpass.Local runs on Windows with JDK 21.
Compatibility and risk
Desktop test code only. No production, platform, or server behavior changes.
Visual changes
Not applicable.