Skip to content

video_engine.cpp reaches Windows with unguarded POSIX stat — reddens windows-msvc-* on EVERY open PR #664

Description

@localai-bot

What is red

windows-msvc-cpu and windows-msvc-vulkan fail on every open PR in the repository — not only the LTX-2.5 lane. Sampled: #661, #662, #663 (mine) and #601, #596, #592, #578, #638 (four unrelated lanes). Same failing step, same three lines:

FAILED STEP: Build and execute the native Windows CPU focused gate
ERROR: src/vllm/multimodal/video_engine.cpp:21: unguarded POSIX include/call reaches Windows
ERROR: src/vllm/multimodal/video_engine.cpp:59: unguarded POSIX include/call reaches Windows
ERROR: src/vllm/multimodal/video_engine.cpp:64: unguarded POSIX include/call reaches Windows

main itself is not a denominator here — the Windows jobs are skipped on push runs (48412ae2d, 67e53e716), so the failure is only visible on PRs. That is why it went unnoticed.

Who owns it

Mine. The generalized video seam landed in cefacd2d0 (#435 / #641) and introduced:

  • src/vllm/multimodal/video_engine.cpp:21#include <sys/stat.h>
  • :59::stat(...) + S_ISDIR(...) in IsDir
  • :64::stat(...) in Exists

scripts/check-windows-portability.py:1675-1688 flags these under full_source_posix, which applies to every scanned source, not only the REQUIRED_CPP platform-boundary set — so no exemption applies and none should.

The fix

The sibling file in the same lane already does this portably: src/vllm/model_executor/models/minimax_h3_sharded.cpp:80-82 uses std::filesystem::is_directory(NativePath(path), error). std::filesystem is already used across the tree (gguf_reader.cpp, safetensors_reader.cpp, ltx2_video.cpp, minimax_h3_video.cpp, read_only_file_mapping.h). Route IsDir/Exists through it and drop the <sys/stat.h> include.

Two things to preserve, not merely to compile:

  • NativePath(), because check-windows-portability.py:1689-1693 also forbids lossy .string() path conversion on the platform boundary.
  • The std::error_code overloads — the POSIX version returned false for an unreadable path rather than throwing, and the throwing std::filesystem overloads would change that to an exception.

Scope

src/vllm/multimodal/video_engine.cpp only. This does not touch the checker's semantics — the checker is right and the source is wrong.

Related: #659, #660 (same shape — my landed LTX code reddening other lanes' branches).

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions