Skip to content

test_qwen3_5_decode_graph_seam SEGFAULTs on main, and main's CI cannot report it because every run is cancelled #1403

Description

@localai-bot

Found while running the operator gate for row ENG-EXPERT-STREAM-DEVICE (#1124, PR #1377). Filed in flow; it is not that row's defect.

What happens

test_qwen3_5_decode_graph_seam terminates with SIGSEGV. It is not a failed assertion, so no doctest output survives to name the case.

1/1 Test #101: test_qwen3_5_decode_graph_seam ...***Exception: SegFault  1.16 sec
0% tests passed, 1 tests failed out of 1

It is main's, and here is the control

I ran the branch and main in the SAME build directory with the SAME flags, changing only the checked-out source, so the toolchain, the configure and the object cache are held constant:

Tree Result
row/ENG-EXPERT-STREAM-DEVICE-W0 at a1869e482 SEGFAULT, 16.48 s
origin/main at 96ed8346f SEGFAULT, 1.16 s

Build of the control: rc 0, 0 error:/FAILED: lines, grep -c 'No space left on device' = 0. The branch does not touch tests/vllm/models/test_qwen3_5_decode_graph_seam.cpp.

The last commit to that test is 5f68e60df, feat(ENG-CUDAGRAPH-BREAK): widen graph eligibility to the step's actual query length, and key the spec ring so it cannot collide (#1374, #1020), which is on main. That is where to start, not a conclusion: I did not bisect, and the segfault may equally sit in the production code that commit widened the eligibility of.

Why it reached main

main's own CI never reports. Of the last 60 workflow runs in this repository, 30 are completed and every one of them is cancelled — zero success, zero failure — with the rest queued or pending. main's own runs are in that set. This is the condition #1285 already describes. A suite can therefore go red on main and no lane says so, which is how this one got here and how #1240 did before it.

Two secondary observations from the same run, recorded so they are not rediscovered:

  • test_engine_core_proc failed under ctest -j4 at load average 97 and passes serially. A load artifact, not a defect.
  • test_nemotron_h_paged_forward fails with No valid attention backend for device type 0 from {FLASH_ATTN: [head_size not supported]}. Its doctest summary reads assertions: 18 | 18 passed | 0 failed while 10 of 12 cases THREW — the assertions line cannot see a thrown case, so only the Status: FAILURE! line reports it. Whoever picks that up should grep Status:, not assertions:.

Reproduce

cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build -j6 --target test_qwen3_5_decode_graph_seam
ctest --test-dir build -R '^test_qwen3_5_decode_graph_seam$' --output-on-failure

A first useful step is a debug build or ASan, since the release binary dies without naming a case. ASAN_OPTIONS plus the free-site line distinguishes a dangling temporary from a teardown race, which are the two shapes this tree has seen before.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions