Skip to content

Windows x64: possible crawl wedge past --max-time (engine side of the #595 runner hang) #605

Description

@xroche

PR #595 fixed the test-harness watchdog that let a wedged crawl take down the Windows x64 runner ("the hosted runner lost communication with the server"). That fix reaps and bounds a hang, but it does not explain why a crawl ran long enough to matter.

Every CI crawl runs with --max-time=120, so no single one should exceed about two minutes. During the 2026-07-15 x64 failure burst the job instead ran its full 45-minute step budget. That points to one of two causes: a crawl ran well past --max-time, or the harness alone accounts for the time (a native httrack.exe that timeout could not signal, left orphaned, plus a failure-path re-run that had no watchdog). #595 fixed the harness side. This issue is about the engine side.

--max-time is enforced by a periodic poll: back_checkmirror / back_mirror_limit in src/htsback.c request a smooth stop past the deadline and hard-stop after a grace (added in #481). The poll only runs while the crawl loop runs. Reads go through select() with a timeout rather than blocking (htsback.c:2641), so a stuck transfer should still let the loop tick, which makes a real --max-time failure less likely than it first looked. Winsocks select()does diverge from POSIX here (#579: a failed connect shows up in the exception set, not as writable), so a Windows-only path where the loop stalls without--max-time` firing is possible but unconfirmed.

There is no reproducer, and it is intermittent and x64-only. Now that #595 caps every test at 600s, a crawl that genuinely wedges past --max-time will show up as a clean 600s timeout of a specific *_local-*.test, not a silent runner death. Concrete next step: if such a timeout appears on x64, capture that tests hts-log.txt and check whether the "More than 120 seconds passed.. giving up" line is present, along with the stuck slots state. If nothing recurs, #595 resolved the symptom and this can be closed.

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