Branch: refs/heads/webkitglib/2.52
Home: https://github.com/WebKit/WebKit
Commit: 9106ada8d005040e244d31c03fa386ba2ba4a2df
https://github.com/WebKit/WebKit/commit/9106ada8d005040e244d31c03fa386ba2ba4a2df
Author: Claudio Saavedra <[email protected]>
Date: 2026-09-10 (Thu, 10 Sep 2026)
Changed paths:
M Tools/Scripts/webkitpy/webdriver_tests/pytest_runner.py
Log Message:
-----------
Cherry-pick 320815@main (92641830324a).
https://bugs.webkit.org/show_bug.cgi?id=322171
[WebDriver] pytest-timeout's SIGALRM can wedge the asyncio loop and hang
the run
https://bugs.webkit.org/show_bug.cgi?id=322171
Reviewed by Carlos Alberto Lopez Perez.
pytest-timeout raises from its SIGALRM handler wherever the alarm lands.
When
that is inside asyncio's scheduler, for instance while Future.set_result()
is
queueing the wake-up of the task awaiting it, the future is marked done but
the
wake-up is never scheduled. asyncio swallows the exception as "Exception in
callback", the test task is parked for good, and the loop keeps servicing
the
websockets keepalive until someone kills the bot. Every run of the BiDi
tests
expected to time out goes through this path.
Wrap the handler pytest-timeout installs so that, while an event loop is
running, the alarm is only delivered from the selector the idle loop is
blocked
in, where the exception propagates cleanly out of run_until_complete().
Anywhere
else inside the loop it is re-armed a few milliseconds later instead.
Also match the timeout message pytest-timeout 2.4.0 produces, which has been
making unexpected timeouts show up as failures since the bump.
* Tools/Scripts/webkitpy/webdriver_tests/pytest_runner.py:
(SubtestResultRecorder._was_timeout):
(TimeoutSignalHandler):
(TimeoutSignalHandler.pytest_timeout_set_timer):
(TimeoutSignalHandler._should_defer_timeout):
(run):
Canonical link: https://commits.webkit.org/320815@main
Canonical link: https://commits.webkit.org/305877.1176@webkitglib/2.52
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications