Skip to content

[v22.x backport] test_runner: avoid hanging on incomplete v8 frames - #65807

Open
P4suta wants to merge 2 commits into
nodejs:v22.x-stagingfrom
P4suta:backport-test-runner-deserializer-to-v22
Open

[v22.x backport] test_runner: avoid hanging on incomplete v8 frames#65807
P4suta wants to merge 2 commits into
nodejs:v22.x-stagingfrom
P4suta:backport-test-runner-deserializer-to-v22

Conversation

@P4suta

@P4suta P4suta commented Sep 5, 2026

Copy link
Copy Markdown

Backport #62704 and #64706 together to v22.x-staging to fix test-runner hangs and deserialization errors triggered by binary child stdout.

This follows up on #64706 (comment).

Why backport to Maintenance LTS

In #62693, child stdout containing FF 0F 7F FF FF FF leaves the parent test runner spinning while draining an incomplete V8 frame. The hang can stall CI even with --test-force-exit; the report also documents that the runner's timeout and SIGTERM cannot recover it. #64061 documents an Appium CI failure in the same deserialization path.

Both fixes have shipped in Current for more than two weeks: #62704 in v26.2.0 (May 20), and #64706 in v26.7.0 (August 5). They are also released in v24.18.0 and v24.20.0 respectively. This backport changes only the deserializer and its existing regression test, with no new public API.

Backport details

Validation

Base: 839480a471e0f5dfe6dd2a6255ad66ddd99e3c14 (v22.x-staging, v22.23.3-pre). Environment: Linux x64, GCC 13.3.0, Python 3.12.3.

Built the unchanged base and each backport revision locally. The regression test is test/parallel/test-runner-v8-deserializer.mjs.

Revision Regression tests FF 0F 7F FF FF FF stdout FF 0F 80 00 00 00 stdout
Unchanged base 31 passed Hangs; SIGKILL required Exits with failure
#62704 only 36 passed Passes Exits with failure
Both backports 37 passed Passes Passes

Both binary-stdout cases were checked with --test and with --test --test-force-exit. An external timeout bounded the baseline hangs. A direct FileTest.parseMessage() check also confirmed the unsigned case's deserialization error on the unchanged base.

  • /usr/bin/python3 tools/test.py -j4 --abort-on-timeout -p tap '*/test-runner-*': passed (55 cases, including 1 built-in skip).
  • make lint PYTHON=/usr/bin/python3 CPPLINT_QUIET='--quiet --repository=.' JOBS=4: passed. The repository override prevents cpplint from using the enclosing checkout when checking header guards; it does not disable those checks.
  • make -j4 test PYTHON=/usr/bin/python3 JOBS=4 TEST_CI_ARGS='--abort-on-timeout -p tap': passed (exit 0). All 4,731 JavaScript/addon cases completed without unexpected failures, including 39 built-in skips. C++ tests (164), doctool tests (7), and tool tests (5) also passed.

Runtime tests ran outside the execution sandbox, with NO_COLOR, FORCE_COLOR, and NODE_DISABLE_COLORS unset. The final full run also used TERM=xterm-256color. Inherited NO_COLOR=1 caused two color-output failures, and TERM=dumb caused nine REPL failures in the first full run. Both sets reproduced on the unchanged base and passed there with the corrected environment, and all passed in the final full backport run. No test or snapshot changes were made for these environment issues.

Could a backporter apply the appropriate v22 backport labels to the original PRs, and could a collaborator or triager start full CI for this PR?

Refs: #62704
Refs: #64706
Refs: #62693
Refs: #64061

thisalihassan and others added 2 commits September 5, 2026 13:57
Signed-off-by: Ali Hassan <ali-hassan27@outlook.com>
PR-URL: nodejs#62704
Reviewed-By: Moshe Atlow <moshe@atlow.co.il>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Signed-off-by: Aviv Keller <me@aviv.sh>
PR-URL: nodejs#64706
Reviewed-By: Moshe Atlow <moshe@atlow.co.il>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/test_runner

@nodejs-github-bot nodejs-github-bot added needs-ci PRs that need a full CI run. test_runner Issues and PRs related to the test runner subsystem. v22.x Issues that can be reproduced on v22.x or PRs targeting the v22.x-staging branch. labels Sep 5, 2026
@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Welcome to Node.js, and thank you for your first contribution!

Before review, please take a moment to read:

Please make sure every commit is signed off. For a first pull request, GitHub Actions require collaborator approval and Jenkins CI must be started by a collaborator or triager, so an initial wait is normal.

@aduh95 aduh95 added author ready PRs with CI started, the required approvals, and no outstanding review comments. request-ci Add this label to start a Jenkins CI on a PR. labels Sep 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

author ready PRs with CI started, the required approvals, and no outstanding review comments. needs-ci PRs that need a full CI run. request-ci Add this label to start a Jenkins CI on a PR. test_runner Issues and PRs related to the test runner subsystem. v22.x Issues that can be reproduced on v22.x or PRs targeting the v22.x-staging branch.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants