Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork7.9k
Description
Bug summary
We've previously not been installing Qt wrappers such as PyQt6 or PySide.#27723 adds those back, but we have discovered thattest_other_signal_before_sigint
fails on CI. The subprocess appears to segfault somewhere in the Qt event loop.
I had tried to debug it withc1afbac, but then it stopped failing. Reverting that change then failed again, though one time it passed. So this seems to be fairly flaky.
I went through all CI runs, and found that this is not particularly limited to any parametrization:
4 _ test_other_signal_before_sigint[show-kwargs0-MPLBACKEND=qtcairo-QT_API=PyQt6-BACKEND_DEPS=PyQt6,cairocffi] _ 3 _ test_other_signal_before_sigint[show-kwargs0-MPLBACKEND=qtcairo-QT_API=PySide6-BACKEND_DEPS=PySide6,cairocffi] _ 3 _ test_other_signal_before_sigint[show-kwargs0-MPLBACKEND=qtcairo-QT_API=PyQt5-BACKEND_DEPS=PyQt5,cairocffi] _ 3 _ test_other_signal_before_sigint[show-kwargs0-MPLBACKEND=qtagg-QT_API=PyQt6-BACKEND_DEPS=PyQt6] _ 2 _ test_other_signal_before_sigint[show-kwargs0-MPLBACKEND=qtcairo-QT_API=PySide2-BACKEND_DEPS=PySide2,cairocffi] _ 2 _ test_other_signal_before_sigint[show-kwargs0-MPLBACKEND=qtagg-QT_API=PySide6-BACKEND_DEPS=PySide6] _ 1 _ test_other_signal_before_sigint[show-kwargs0-MPLBACKEND=qtagg-QT_API=PySide2-BACKEND_DEPS=PySide2] _
Unfortunately, I don't think@tacaswell was able to reproduce the crash, and@ksunden was only able to reproduce once, but only as part of a full test suite, and never again later in a smaller run.
So as part of#27723, I've marked these asxfail
, but if we can figure out a way to reproduce, we should be able to fix this.
Code for reproduction
pytest-ktest_other_signal_before_sigintlib/matplotlib/tests/test_backends_interactive.py
Actual outcome
_ test_other_signal_before_sigint[show-kwargs0-MPLBACKEND=qtagg-QT_API=PySide6-BACKEND_DEPS=PySide6] _[gw1] darwin -- Python 3.12.2 /Library/Frameworks/Python.framework/Versions/3.12/bin/pythonenv = {'BACKEND_DEPS': 'PySide6', 'MPLBACKEND': 'qtagg', 'QT_API': 'PySide6'}target = 'show', kwargs = {'block': True}request = <FixtureRequest for <Function test_other_signal_before_sigint[show-kwargs0-MPLBACKEND=qtagg-QT_API=PySide6-BACKEND_DEPS=PySide6]>> @pytest.mark.skipif(sys.platform == 'win32', reason='No other signal available to send on Windows') @pytest.mark.parametrize("env", _get_testable_interactive_backends()) @pytest.mark.parametrize("target, kwargs", [ ('show', {'block': True}), ('pause', {'interval': 10}) ]) def test_other_signal_before_sigint(env, target, kwargs, request): backend = env.get("MPLBACKEND") if not backend.startswith(("qt", "macosx")): pytest.skip("SIGINT currently only tested on qt and macosx") if backend == "macosx": request.node.add_marker(pytest.mark.xfail(reason="macosx backend is buggy")) proc = _WaitForStringPopen( [sys.executable, "-c", inspect.getsource(_test_other_signal_before_sigint_impl) + "\n_test_other_signal_before_sigint_impl(" f"{backend!r}, {target!r}, {kwargs!r})"]) try: proc.wait_for('DRAW') os.kill(proc.pid, signal.SIGUSR1) proc.wait_for('SIGUSR1') os.kill(proc.pid, signal.SIGINT) stdout, _ = proc.communicate(timeout=_test_timeout) except Exception: proc.kill() stdout, _ = proc.communicate() raise print(stdout)> assert 'SUCCESS' in stdoutE AssertionError/Users/runner/work/matplotlib/matplotlib/lib/matplotlib/tests/test_backends_interactive.py:790: AssertionError----------------------------- Captured stdout call ---------------------------------------------------------- Captured stderr call -----------------------------Fatal Python error: Segmentation faultCurrent thread 0x00000001d88a9c40 (most recent call first): File "/Users/runner/work/matplotlib/matplotlib/lib/matplotlib/backends/qt_compat.py", line 159 in _exec File "/Users/runner/work/matplotlib/matplotlib/lib/matplotlib/backends/backend_qt.py", line 633 in start_main_loop File "/Users/runner/work/matplotlib/matplotlib/lib/matplotlib/backend_bases.py", line 3536 in show File "/Users/runner/work/matplotlib/matplotlib/lib/matplotlib/pyplot.py", line 590 in show File "<string>", line 21 in _test_other_signal_before_sigint_impl File "<string>", line 25 in <module>Extension modules: numpy.core._multiarray_umath, numpy.core._multiarray_tests, numpy.linalg._umath_linalg, numpy.fft._pocketfft_internal, numpy.random._common, numpy.random.bit_generator, numpy.random._bounded_integers, numpy.random._mt19937, numpy.random.mtrand, numpy.random._philox, numpy.random._pcg64, numpy.random._sfc64, numpy.random._generator, PIL._imaging, kiwisolver._cext, PyQt6.QtCore, PyQt6.QtGui, PyQt6.QtWidgets (total: 18)
Expected outcome
Tests pass
Additional information
No response
Operating system
macOS
Matplotlib Version
main
Matplotlib Backend
QtAgg
Python version
3.10 or 3.12
Jupyter version
No response
Installation
git checkout