Skip to content

qrexec-agent: avoid blocking on incomplete trigger requests - #239

Merged
marmarek merged 9 commits into
QubesOS:mainfrom
iasds:fix/nonblocking-trigger-reads-main
Jul 30, 2026
Merged

qrexec-agent: avoid blocking on incomplete trigger requests#239
marmarek merged 9 commits into
QubesOS:mainfrom
iasds:fix/nonblocking-trigger-reads-main

Conversation

@iasds

@iasds iasds commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Summary

  • accept local trigger clients without blocking the agent event loop
  • track incomplete trigger requests and read their header and body incrementally via ppoll
  • bound incomplete requests with a timeout and evict the oldest pending client at capacity
  • add socket regression tests for a competing valid request and fragmented request framing

Test plan

  • Reproduced the original issue in an AppVM: baseline 0.01s, blocked 3.01s (exit 124), recovered 0.01s.
  • gcc -fsyntax-only for agent/qrexec-agent.c using the project include paths and a minimal libvchan API stub; the AppVM lacks the real libvchan development package.
  • python3 -m py_compile qrexec/tests/socket/agent.py
  • git diff --check

Fixes QubesOS/qubes-issues#11010

@marmarek

Copy link
Copy Markdown
Member

PipelineRetry

@iasds

iasds commented Jul 25, 2026

Copy link
Copy Markdown
Contributor Author

Pushed two test-only follow-up commits to address the failed socket-test race and make the fragmented-request regression deterministic. The regression now waits for the trigger socket to exist and verifies that a complete request is serviced while another client has sent only part of its header. Local socket-backend build and both regression tests pass.

@codecov

codecov Bot commented Jul 25, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 90.79755% with 15 lines in your changes missing coverage. Please review.
✅ Project coverage is 81.08%. Comparing base (1babb46) to head (fb73fb5).

Files with missing lines Patch % Lines
agent/qrexec-agent.c 84.53% 15 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #239      +/-   ##
==========================================
+ Coverage   80.97%   81.08%   +0.11%     
==========================================
  Files          58       58              
  Lines       10842    10940      +98     
==========================================
+ Hits         8779     8871      +92     
- Misses       2063     2069       +6     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Comment thread agent/qrexec-agent.c

int flags = fcntl(client_fd, F_GETFL, 0);
if (flags < 0 || fcntl(client_fd, F_SETFL, flags | O_NONBLOCK) < 0) {
close(client_fd);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Log error here.

Comment thread agent/qrexec-agent.c
if (!client->params)
goto error;
}
ret = read_trigger_client(client, client->params, &client->params_received,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If reads stop here (this one returns 0), next iteration will read the data into the header buffer again. I think you may use client->params == NULL as a condition for reading the header above.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, it won't really read anything into the header buffer, it will exit early because client->hdr_received == sizeof(client->hdr) already. But it could use at least a comment if not explicit condition in handle_trigger_client_io() to make it clearer.

@iasds

iasds commented Jul 26, 2026

Copy link
Copy Markdown
Contributor Author

Addressed both review comments: fcntl failures are now logged, and allocating client->params explicitly transitions a client from header parsing to body parsing. The four targeted socket regressions pass locally.

@qubesos-bot

qubesos-bot commented Jul 28, 2026

Copy link
Copy Markdown

OpenQA test summary

Complete test suite and dependencies: https://openqa.qubes-os.org/tests/overview?distri=qubesos&version=4.3&build=2026073003-devel&flavor=pull-requests

Test run included the following:

Upload failures

  • system_tests_extra

    • system_tests: wait_serial (unknown)
      # Command: testfunc qubes.tests.extra...

    • system_tests: Failed (test died + timed out)
      # Test died: command 'testfunc qubes.tests.extra' timed out at qube...

    • system_tests: wait_serial (unknown)
      # Command: curl --form upload=@/var/log/libvirt/libxl/libxl-driver....

  • system_tests_basic_vm_qrexec_gui_ext4

    • system_tests: Failed (test died)
      # Test died: command 'curl --form upload=@tests-qubes.tests.integ.v...

New failures, excluding unstable

Compared to: https://openqa.qubes-os.org/tests/overview?distri=qubesos&version=4.3&build=2026050504-devel&flavor=update

Failed tests

6 failures
  • system_tests_pvgrub_salt_storage

  • system_tests_qrexec

    • TC_00_Qrexec_whonix-workstation-18: test_050_qrexec_simple_eof (failure)
      AssertionError: Timeout, probably EOF wasn't transferred to the VM ...
  • system_tests_network_ipv6

  • system_tests_network_updates

    • [unstable] TC_00_Dom0Upgrade_whonix-gateway-18: test_000_update_salt (failure)
      ?[0;31mDuration: 138229.97 ms?[0;0m... ?[0;31m Changes: ?[0;0m

    • VmUpdates_debian-13-xfce: test_011_pkcon_via_proxy (failure)
      AssertionError: 7 not found in [0] : pkcon refresh: b'Transaction:\...

    • VmUpdates_fedora-44-xfce: test_011_pkcon_via_proxy (failure)
      AssertionError: 7 not found in [0, 100] : pkcon install -y test-pkg...

Fixed failures

Compared to: https://openqa.qubes-os.org/tests/176874#dependencies

31 fixed
  • system_tests_whonix

    • whonixcheck: Failed (test died)
      # Test died: command 'qvm-shutdown --wait anon-whonix ' failed at /...
  • system_tests_pvgrub_salt_storage

    • TC_41_HVMGrub_debian-13-xfce: test_000_standalone_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

    • TC_41_HVMGrub_debian-13-xfce: test_001_standalone_vm_dracut (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

    • TC_41_HVMGrub_debian-13-xfce: test_010_template_based_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

    • TC_41_HVMGrub_fedora-43-xfce: test_010_template_based_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

  • system_tests_extra

    • system_tests: Fail (unknown)
      Tests qubes.tests.extra failed (exit code 1), details reported sepa...

    • TC_01_InputProxyExclude_debian-13-xfce: test_000_qemu_tablet (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

    • TC_01_InputProxyExclude_fedora-43-xfce: test_000_qemu_tablet (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

    • TC_00_QVCTest_fedora-43-xfce: test_010_screenshare (failure + cleanup)
      ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^... AssertionError: 1179648 != 0

    • TC_00_QVCTest_whonix-gateway-18: test_010_screenshare (failure + cleanup)
      AssertionError: 2.3156185715769593 not less than 2.0

    • TC_00_PDFConverter_fedora-43-xfce: test_004_cancel_stops_conversion (failure)
      AssertionError: DispVM not cleaned up 10s after cancel: {<DispVM at...

  • system_tests_usbproxy

    • system_tests: Fail (unknown)
      Tests qubes.tests.extra failed (exit code 1), details reported sepa...

    • system_tests: Failed (test died)
      # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...

    • system_tests: wait_serial (wait serial expected)
      # wait_serial expected: qr/h3uXO-\d+-/...

    • TC_20_USBProxy_core3_fedora-43-xfce: test_090_attach_stubdom (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

  • system_tests_network_ipv6

  • system_tests_audio

  • system_tests_audio@hw1

    • system_tests: Fail (unknown)
      Tests qubes.tests.integ.audio failed (exit code 1), details reporte...

    • system_tests: Failed (test died)
      # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...

    • TC_20_AudioVM_Pulse_debian-13-xfce: test_222_audio_rec_unmuted_pulseaudio (failure)
      AssertionError: only silence detected, no useful audio data

  • system_tests_whonix@hw1

    • whonixcheck: fail (unknown)
      Whonixcheck for sys-whonix failed...

    • whonixcheck: Failed (test died)
      # Test died: systemcheck failed at qubesos/tests/whonixcheck.pm lin...

  • system_tests_guivm_gpu_gui_interactive@hw13

    • shutdown: unnamed test (unknown)
    • shutdown: Failed (test died)
      # Test died: no candidate needle with tag(s) 'text-logged-in-root' ...

Unstable tests

Details
  • system_tests_whonix

    whonixcheck/Failed (2/5 times with errors)
    • job 188935 # Test died: command 'qvm-run -ap whonix-gateway-18 'LC_ALL=C whon...
    • job 189348 # Test died: command 'qvm-run -ap whonix-gateway-18 'LC_ALL=C whon...
    whonixcheck/Failed (1/5 times with errors)
    • job 188636 # Test died: systemcheck failed at qubesos/tests/whonixcheck.pm lin...
    whonixcheck/fail (2/5 times with errors)
    whonixcheck/fail (1/5 times with errors)
    • job 188636 Whonixcheck for whonix-workstation-18 failed...
    whonixcheck/wait_serial (2/5 times with errors)
    • job 188935 # Command: qvm-run -ap whonix-gateway-18 'LC_ALL=C whonixcheck --v...
    • job 189348 # Command: qvm-run -ap whonix-gateway-18 'LC_ALL=C whonixcheck --v...
    whonixcheck/wait_serial (1/5 times with errors)
    • job 189348 # Command: curl --form upload=@/var/log/libvirt/libxl/libxl-driver....
  • system_tests_network

    system_tests/Fail (1/5 times with errors)
    • job 188964 Tests qubes.tests.integ.network failed (exit code 1), details repor...
    system_tests/Failed (1/5 times with errors)
    • job 188964 # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...
    VmNetworking_debian-13-xfce/test_110_dynamic_attach (1/5 times with errors)
    • job 188964 ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^... AssertionError: 125 != 0
    VmNetworking_fedora-43-xfce/test_114_reattach_after_provider_crash (1/5 times with errors)
    • job 188964 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
  • system_tests_pvgrub_salt_storage

    system_tests/Fail (2/5 times with errors)
    • job 188668 Tests qubes.tests.integ.grub failed (exit code 1), details reported...
    • job 188967 Tests qubes.tests.integ.grub failed (exit code 1), details reported...
    system_tests/Fail (1/5 times with errors)
    • job 188967 Tests qubes.tests.integ.salt failed (exit code 1), details reported...
    system_tests/Fail (1/5 times with errors)
    • job 188967 Tests qubes.tests.integ.storage failed (exit code 1), details repor...
    system_tests/Failed (1/5 times with errors)
    • job 190298 # Test died: command 'curl --form upload=@nose2-junit.xml --form up...
    system_tests/Failed (1/5 times with errors)
    • job 188668 # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...
    system_tests/Failed (1/5 times with errors)
    • job 188967 # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...
    TC_41_HVMGrub_debian-13-xfce/test_000_standalone_vm (1/5 times with errors)
    • job 188967 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
    TC_41_HVMGrub_fedora-43-xfce/test_000_standalone_vm (2/5 times with errors)
    • job 188668 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
    • job 188967 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
    StorageReflinkOnExt4/test_000_volatile (1/5 times with errors)
    • job 188967 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
    TC_10_VMSalt_fedora-43-xfce/test_001_multi_state_highstate (1/5 times with errors)
    • job 188967 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
    TC_41_HVMGrub_debian-13-xfce/test_001_standalone_vm_dracut (1/5 times with errors)
    • job 188967 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
    TC_41_HVMGrub_debian-13-xfce/test_010_template_based_vm (2/5 times with errors)
    • job 188668 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
    • job 188967 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
    TC_41_HVMGrub_fedora-43-xfce/test_010_template_based_vm (2/5 times with errors)
    • job 188668 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
    • job 188967 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
    TC_41_HVMGrub_debian-13-xfce/test_011_template_based_vm_dracut (2/5 times with errors)
    • job 188668 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
    • job 188967 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
  • system_tests_splitgpg

    system_tests/Failed (1/5 times with errors)
    • job 189167 # Test died: command 'testfunc qubes.tests.extra' timed out at qube...
    system_tests/wait_serial (1/5 times with errors)
    • job 189167 # Command: testfunc qubes.tests.extra...
  • system_tests_extra

    system_tests/Fail (1/5 times with errors)
    • job 188661 Tests qubes.tests.extra failed (exit code 1), details reported sepa...
    system_tests/Failed (1/5 times with errors)
    • job 188661 # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...
    TC_01_InputProxyExclude_debian-13-xfce/test_000_qemu_tablet (1/5 times with errors)
    • job 188661 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
    TC_01_InputProxyExclude_fedora-43-xfce/test_000_qemu_tablet (1/5 times with errors)
    • job 188661 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
    TC_00_PDFConverter_debian-13-xfce/test_004_cancel_stops_conversion (1/5 times with errors)
    • job 188661 AssertionError: DispVM not cleaned up 20s after cancel: ['disp7751']
    TC_00_PDFConverter_fedora-43-xfce/test_004_cancel_stops_conversion (1/5 times with errors)
    • job 188661 AssertionError: DispVM not cleaned up 20s after cancel: ['disp8125']
    TC_00_Direct_whonix-workstation-18/test_060_import_secret (1/5 times with errors)
    • job 188661 AssertionError: key generation failed: b''b"gpg: keybox '/home/user...
  • system_tests_usbproxy

    system_tests/Fail (1/5 times with errors)
    • job 188934 Tests qubes.tests.extra failed (exit code 1), details reported sepa...
    system_tests/Failed (1/5 times with errors)
    • job 188934 # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...
    TC_20_USBProxy_core3_debian-13-xfce/test_090_attach_stubdom (1/5 times with errors)
    • job 188934 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
    TC_20_USBProxy_core3_fedora-43-xfce/test_090_attach_stubdom (1/5 times with errors)
    • job 188934 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
  • system_tests_qrexec

    system_tests/Fail (1/5 times with errors)
    • job 190299 Tests qubes.tests.integ.qrexec failed (exit code 1), details report...
    system_tests/Failed (1/5 times with errors)
    • job 190299 # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...
    TC_00_Qrexec_whonix-workstation-18/test_095_qrexec_service_socket_vm (1/5 times with errors)
    • job 190299 AssertionError: waiting for /etc/qubes-rpc/test.Socket in VM timed out
  • system_tests_network_ipv6

    system_tests/Fail (4/5 times with errors)
    • job 188525 Tests qubes.tests.integ.network_ipv6 failed (exit code 1), details ...
    • job 188666 Tests qubes.tests.integ.network_ipv6 failed (exit code 1), details ...
    • job 188965 Tests qubes.tests.integ.network_ipv6 failed (exit code 1), details ...
    • job 189378 Tests qubes.tests.integ.network_ipv6 failed (exit code 1), details ...
    system_tests/Failed (4/5 times with errors)
    • job 188525 # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...
    • job 188666 # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...
    • job 188965 # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...
    • job 189378 # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...
    VmIPv6Networking_debian-13-xfce/test_001_simple_networking_paused_from_none_to_existent (1/5 times with errors)
    • job 189378 subprocess.CalledProcessError: Command 'qubes.WaitForNetworkUplink'...
    VmIPv6Networking_fedora-43-xfce/test_030_firewallvm_firewall (1/5 times with errors)
    • job 188965 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
    VmIPv6Networking_fedora-43-xfce/test_040_inter_vm (1/5 times with errors)
    • job 188666 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
    VmIPv6Networking_debian-13-xfce/test_110_dynamic_attach (1/5 times with errors)
    • job 188525 ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^... AssertionError: 125 != 0
    VmIPv6Networking_fedora-43-xfce/test_112_reattach_after_provider_shutdown (1/5 times with errors)
    • job 188666 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
    VmIPv6Networking_fedora-43-xfce/test_113_reattach_after_provider_kill (1/5 times with errors)
    • job 188666 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
  • system_tests_network_updates

    TC_00_Dom0Upgrade_whonix-gateway-18/test_000_update (2/5 times with errors)
    • job 188667 Error: Failed to download metadata for repo 'test': Cannot download...
    • job 189379 Error: Failed to download metadata for repo 'test': Cannot download...
    TC_00_Dom0Upgrade_whonix-gateway-18/test_000_update_salt (1/5 times with errors)
    • job 190297 ?[0;31mDuration: 140907.985 ms?[0;0m... ?[0;31m Changes: ?[0;0m
    TC_00_Dom0Upgrade_whonix-gateway-18/test_001_update_check (3/5 times with errors)
    • job 188966 subprocess.CalledProcessError: Command 'timeout=120; while ! tor-ci...
    • job 189164 subprocess.CalledProcessError: Command 'timeout=120; while ! tor-ci...
    • job 190297 ^... AssertionError: '' is not true
    TC_00_Dom0Upgrade_whonix-gateway-18/test_006_update_flag_clear (2/5 times with errors)
    • job 188667 Error: Failed to download metadata for repo 'test': Cannot download...
    • job 188966 Error: Failed to download metadata for repo 'test': Cannot download...
    TC_00_Dom0Upgrade_whonix-gateway-18/test_030_install_unsigned (1/5 times with errors)
    • job 189379 subprocess.CalledProcessError: Command 'timeout=120; while ! tor-ci...
    system_tests/wait_serial (1/5 times with errors)
    • job 188966 # Command: curl --form upload=@/var/log/libvirt/libxl/libxl-driver....
  • system_tests_kde_gui_interactive

    gui_keyboard_layout/Failed (2/5 times with errors)
    • job 188640 # Test died: command 'qvm-shutdown --wait work' timed out at /usr/l...
    • job 189137 # Test died: command 'qvm-shutdown --wait work' timed out at /usr/l...
    gui_keyboard_layout/wait_serial (2/5 times with errors)
    • job 188640 # Command: qvm-shutdown --wait work...
    • job 189137 # Command: qvm-shutdown --wait work...
  • system_tests_basic_vm_qrexec_gui_zfs

    system_tests/Fail (1/5 times with errors)
    • job 189155 Tests qubes.tests.integ.vm_qrexec_gui failed (exit code 1), details...
    switch_pool/Failed (1/5 times with errors)
    • job 189183 # Test died: command 'qvm-start --skip-if-running sys-firewall sys-...
    system_tests/Failed (1/5 times with errors)
    • job 189155 # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...
    TC_20_NonAudio_whonix-gateway-18-pool/test_012_qubes_desktop_run (1/5 times with errors)
    • job 189155 raise TimeoutError from exc_val... TimeoutError
  • system_tests_audio

    system_tests/Fail (3/5 times with errors)
    • job 188526 Tests qubes.tests.integ.audio failed (exit code 1), details reporte...
    • job 188639 Tests qubes.tests.integ.audio failed (exit code 1), details reporte...
    • job 189136 Tests qubes.tests.integ.audio failed (exit code 1), details reporte...
    system_tests/Failed (3/5 times with errors)
    • job 188526 # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...
    • job 188639 # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...
    • job 189136 # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...
    TC_20_AudioVM_Pulse_fedora-43-xfce/test_223_audio_play_hvm (1/5 times with errors)
    • job 188639 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
    TC_20_AudioVM_Pulse_fedora-43-xfce/test_224_audio_rec_muted_hvm (1/5 times with errors)
    • job 188639 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
    TC_20_AudioVM_Pulse_whonix-workstation-18/test_224_audio_rec_muted_hvm (1/5 times with errors)
    • job 188639 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
    TC_20_AudioVM_Pulse_whonix-workstation-18/test_225_audio_rec_unmuted_hvm (2/5 times with errors)
    • job 188526 AssertionError: too short audio, expected 10s, got 6.66848072562358...
    • job 188639 AssertionError: too short audio, expected 10s, got 6.83272108843537...
    TC_20_AudioVM_PipeWire_whonix-workstation-18/test_251_audio_playback_audiovm_pipewire_late_start (1/5 times with errors)
    • job 189136 AssertionError: too short audio, expected 10s, got 9.09505668934240...
    TC_20_AudioVM_Pulse_fedora-43-xfce/test_252_audio_playback_audiovm_switch_hvm (1/5 times with errors)
    • job 188639 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
  • system_tests_audio@hw1

    system_tests/Fail (3/5 times with errors)
    • job 188526 Tests qubes.tests.integ.audio failed (exit code 1), details reporte...
    • job 188639 Tests qubes.tests.integ.audio failed (exit code 1), details reporte...
    • job 189136 Tests qubes.tests.integ.audio failed (exit code 1), details reporte...
    system_tests/Failed (3/5 times with errors)
    • job 188526 # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...
    • job 188639 # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...
    • job 189136 # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...
    TC_20_AudioVM_Pulse_fedora-43-xfce/test_223_audio_play_hvm (1/5 times with errors)
    • job 188639 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
    TC_20_AudioVM_Pulse_fedora-43-xfce/test_224_audio_rec_muted_hvm (1/5 times with errors)
    • job 188639 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
    TC_20_AudioVM_Pulse_whonix-workstation-18/test_224_audio_rec_muted_hvm (1/5 times with errors)
    • job 188639 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
    TC_20_AudioVM_Pulse_whonix-workstation-18/test_225_audio_rec_unmuted_hvm (2/5 times with errors)
    • job 188526 AssertionError: too short audio, expected 10s, got 6.66848072562358...
    • job 188639 AssertionError: too short audio, expected 10s, got 6.83272108843537...
    TC_20_AudioVM_PipeWire_whonix-workstation-18/test_251_audio_playback_audiovm_pipewire_late_start (1/5 times with errors)
    • job 189136 AssertionError: too short audio, expected 10s, got 9.09505668934240...
    TC_20_AudioVM_Pulse_fedora-43-xfce/test_252_audio_playback_audiovm_switch_hvm (1/5 times with errors)
    • job 188639 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
  • system_tests_whonix@hw1

    whonixcheck/Failed (2/5 times with errors)
    • job 188935 # Test died: command 'qvm-run -ap whonix-gateway-18 'LC_ALL=C whon...
    • job 189348 # Test died: command 'qvm-run -ap whonix-gateway-18 'LC_ALL=C whon...
    whonixcheck/Failed (1/5 times with errors)
    • job 188636 # Test died: systemcheck failed at qubesos/tests/whonixcheck.pm lin...
    whonixcheck/fail (2/5 times with errors)
    whonixcheck/fail (1/5 times with errors)
    • job 188636 Whonixcheck for whonix-workstation-18 failed...
    whonixcheck/wait_serial (2/5 times with errors)
    • job 188935 # Command: qvm-run -ap whonix-gateway-18 'LC_ALL=C whonixcheck --v...
    • job 189348 # Command: qvm-run -ap whonix-gateway-18 'LC_ALL=C whonixcheck --v...
    whonixcheck/wait_serial (1/5 times with errors)
    • job 189348 # Command: curl --form upload=@/var/log/libvirt/libxl/libxl-driver....
  • system_tests_basic_vm_qrexec_gui_btrfs

    system_tests/Fail (1/5 times with errors)
    • job 188655 Tests qubes.tests.integ.basic failed (exit code 1), details reporte...
    system_tests/Fail (1/5 times with errors)
    • job 188655 Tests qubes.tests.integ.vm_qrexec_gui failed (exit code 1), details...
    system_tests/Failed (1/5 times with errors)
    • job 188655 # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...
    TC_20_NonAudio_debian-13-xfce-pool/test_000_start_shutdown (1/5 times with errors)
    • job 188655 qubes.exc.QubesVMShutdownTimeoutError: Domain shutdown timed out: '...
    TC_00_Basic/test_210_bootmode_template (1/5 times with errors)
    • job 188655 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
  • system_tests_basic_vm_qrexec_gui_ext4

    system_tests/Fail (1/5 times with errors)
    • job 188955 Tests qubes.tests.integ.vm_qrexec_gui failed (exit code 1), details...
    system_tests/Failed (1/5 times with errors)
    • job 188955 # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...
    TC_20_NonAudio_debian-13-xfce-pool/test_500_gui_agent_env_sync (1/5 times with errors)
    • job 188955 qubes.exc.QubesVMShutdownTimeoutError: Domain shutdown timed out: '...
    TC_20_NonAudio_fedora-43-xfce-pool/test_500_gui_agent_env_sync (1/5 times with errors)
    • job 188955 OSError: Volume /var/lib/qubes-pool/appvms/test-inst-envsync/privat...
    TC_20_NonAudio_whonix-gateway-18-pool/test_500_gui_agent_env_sync (1/5 times with errors)
    • job 188955 OSError: Volume /var/lib/qubes-pool/appvms/test-inst-envsync/privat...
    TC_20_NonAudio_whonix-workstation-18-pool/test_500_gui_agent_env_sync (1/5 times with errors)
    • job 188955 OSError: Volume /var/lib/qubes-pool/appvms/test-inst-envsync/privat...
  • system_tests_basic_vm_qrexec_gui_xfs

    startup/ (1/5 times with errors)
    system_tests/Fail (1/5 times with errors)
    • job 188956 Tests qubes.tests.integ.vm_qrexec_gui failed (exit code 1), details...
    startup/Failed (1/5 times with errors)
    • job 189154 # Test died: no candidate needle with tag(s) 'luks-prompt, login-pr...
    system_tests/Failed (1/5 times with errors)
    • job 188956 # Test died: Some tests failed at qubesos/tests/system_tests.pm lin...
    TC_20_NonAudio_fedora-43-xfce-pool/test_101_qrexec_filecopy_with_autostart (1/5 times with errors)
    • job 188956 AssertionError: qvm-copy-to-vm failed: b'In order to avoid typing t...
    TC_20_NonAudio_fedora-43-xfce-pool/test_400_long_window_title (1/5 times with errors)
    • job 188956 qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...
    startup/wait_serial (1/5 times with errors)
    • job 189154 # wait_serial expected: qr/login:\s*$|root@.*#\s*$/ui...
    startup/wait_serial (1/5 times with errors)
    • job 189154 # wait_serial expected: qr/PS1="root# "/u...
    startup/wait_serial (1/5 times with errors)
    startup/wait_serial (1/5 times with errors)
    • job 189154 # wait_serial expected: "export TERM=dumb; stty cols 2048 rows 25; ...
  • system_tests_gui_tools@hw7

    qui_widgets_update/ (1/5 times with errors)
    qui_widgets_update/ (1/5 times with errors)
    qui_widgets_update/Failed (1/5 times with errors)
    • job 189375 # Test died: no candidate needle with tag(s) 'qubes-update-finish' ...
  • system_tests_gui_tools

    qui_widgets_update/ (1/5 times with errors)
    qui_widgets_update/ (1/5 times with errors)
    qui_widgets_update/Failed (1/5 times with errors)
    • job 189375 # Test died: no candidate needle with tag(s) 'qubes-update-finish' ...

Performance Tests

Performance degradation:

14 performance degradations
  • whonix-gateway-18_exec: 9.00 🔻 ( previous job: 8.01, degradation: 112.35%)
  • whonix-gateway-18_socket-data-duplex: 100.46 🔻 ( previous job: 90.03, degradation: 111.58%)
  • whonix-workstation-18_exec: 9.00 🔻 ( previous job: 8.14, degradation: 110.55%)
  • whonix-workstation-18_socket: 8.57 🔻 ( previous job: 7.66, degradation: 111.86%)
  • whonix-workstation-18_exec-data-duplex-root: 158.07 🔻 ( previous job: 130.67, degradation: 120.97%)
  • dom0_varlibqubes_seq1m_q8t1_read 3:read_bandwidth_kb: 350225.00 🔻 ( previous job: 429040.00, degradation: 81.63%)
  • dom0_varlibqubes_seq1m_q8t1_write 3:write_bandwidth_kb: 195720.00 🔻 ( previous job: 257066.00, degradation: 76.14%)
  • debian-13-xfce_dom0-dispvm-gui-api (mean:8.776): 105.31 🔻 ( previous job: 93.50, degradation: 112.64%)
  • whonix-workstation-18_dom0-dispvm-api (mean:9.542): 114.50 🔻 ( previous job: 97.14, degradation: 117.88%)
  • whonix-workstation-18_dom0-dispvm-gui-api (mean:11.567): 138.80 🔻 ( previous job: 121.86, degradation: 113.90%)
  • whonix-workstation-18_dom0-dispvm-preload-2-delay-0-api (mean:4.522): 54.27 🔻 ( previous job: 48.26, degradation: 112.45%)
  • whonix-workstation-18_dom0-dispvm-preload-4-api (mean:3.53): 42.35 🔻 ( previous job: 38.29, degradation: 110.62%)
  • whonix-workstation-18_dom0-dispvm-preload-4-delay-minus-1d2-api (mean:4.23): 50.76 🔻 ( previous job: 42.67, degradation: 118.98%)
  • whonix-workstation-18_dom0-vm-gui-api (mean:0.051): 0.62 🔻 ( previous job: 0.56, degradation: 111.15%)

Remaining performance tests:

97 tests
  • debian-13-xfce_exec: 8.39 🔻 ( previous job: 7.85, degradation: 106.81%)
  • debian-13-xfce_exec-root: 27.47 🔻 ( previous job: 26.74, degradation: 102.73%)
  • debian-13-xfce_socket: 8.29 🟢 ( previous job: 8.37, improvement: 99.09%)
  • debian-13-xfce_socket-root: 9.16 🔻 ( previous job: 9.13, degradation: 100.36%)
  • debian-13-xfce_exec-data-simplex: 61.68 🟢 ( previous job: 63.05, improvement: 97.82%)
  • debian-13-xfce_exec-data-duplex: 66.30 🔻 ( previous job: 62.45, degradation: 106.17%)
  • debian-13-xfce_exec-data-duplex-root: 76.60 🟢 ( previous job: 78.04, improvement: 98.16%)
  • debian-13-xfce_socket-data-duplex: 85.38 🟢 ( previous job: 85.67, improvement: 99.67%)
  • fedora-44-xfce_exec: 9.19
  • fedora-44-xfce_exec-root: 71.62
  • fedora-44-xfce_socket: 9.08
  • fedora-44-xfce_socket-root: 9.21
  • fedora-44-xfce_exec-data-simplex: 66.03
  • fedora-44-xfce_exec-data-duplex: 65.61
  • fedora-44-xfce_exec-data-duplex-root: 106.60
  • fedora-44-xfce_socket-data-duplex: 79.02
  • whonix-gateway-18_exec-root: 138.72 🔻 ( previous job: 126.14, degradation: 109.97%)
  • whonix-gateway-18_socket: 9.12 🔻 ( previous job: 8.63, degradation: 105.64%)
  • whonix-gateway-18_socket-root: 8.53 🔻 ( previous job: 8.37, degradation: 101.91%)
  • whonix-gateway-18_exec-data-simplex: 62.39 🟢 ( previous job: 62.50, improvement: 99.83%)
  • whonix-gateway-18_exec-data-duplex: 66.38 🟢 ( previous job: 68.01, improvement: 97.60%)
  • whonix-gateway-18_exec-data-duplex-root: 146.93 🔻 ( previous job: 137.28, degradation: 107.03%)
  • whonix-workstation-18_exec-root: 153.22 🔻 ( previous job: 144.02, degradation: 106.39%)
  • whonix-workstation-18_socket-root: 8.66 🟢 ( previous job: 8.87, improvement: 97.68%)
  • whonix-workstation-18_exec-data-simplex: 67.55 🔻 ( previous job: 66.36, degradation: 101.79%)
  • whonix-workstation-18_exec-data-duplex: 66.97 🔻 ( previous job: 65.56, degradation: 102.16%)
  • whonix-workstation-18_socket-data-duplex: 87.87 🟢 ( previous job: 92.97, improvement: 94.52%)
  • dom0_root_seq1m_q8t1_read 3:read_bandwidth_kb: 461521.00 🟢 ( previous job: 388793.00, improvement: 118.71%)
  • dom0_root_seq1m_q8t1_write 3:write_bandwidth_kb: 184812.00 🟢 ( previous job: 119690.00, improvement: 154.41%)
  • dom0_root_seq1m_q1t1_read 3:read_bandwidth_kb: 360087.00 🟢 ( previous job: 245223.00, improvement: 146.84%)
  • dom0_root_seq1m_q1t1_write 3:write_bandwidth_kb: 185996.00 🔻 ( previous job: 199974.00, degradation: 93.01%)
  • dom0_root_rnd4k_q32t1_read 3:read_bandwidth_kb: 17163.00 🟢 ( previous job: 13948.00, improvement: 123.05%)
  • dom0_root_rnd4k_q32t1_write 3:write_bandwidth_kb: 6408.00 🔻 ( previous job: 6899.00, degradation: 92.88%)
  • dom0_root_rnd4k_q1t1_read 3:read_bandwidth_kb: 8885.00 🔻 ( previous job: 8963.00, degradation: 99.13%)
  • dom0_root_rnd4k_q1t1_write 3:write_bandwidth_kb: 5115.00 🟢 ( previous job: 5055.00, improvement: 101.19%)
  • dom0_varlibqubes_seq1m_q1t1_read 3:read_bandwidth_kb: 446012.00 🔻 ( previous job: 446202.00, degradation: 99.96%)
  • dom0_varlibqubes_seq1m_q1t1_write 3:write_bandwidth_kb: 203737.00 🟢 ( previous job: 201978.00, improvement: 100.87%)
  • dom0_varlibqubes_rnd4k_q32t1_read 3:read_bandwidth_kb: 94979.00 🔻 ( previous job: 102155.00, degradation: 92.98%)
  • dom0_varlibqubes_rnd4k_q32t1_write 3:write_bandwidth_kb: 9894.00 🔻 ( previous job: 10623.00, degradation: 93.14%)
  • dom0_varlibqubes_rnd4k_q1t1_read 3:read_bandwidth_kb: 7546.00 🔻 ( previous job: 8179.00, degradation: 92.26%)
  • dom0_varlibqubes_rnd4k_q1t1_write 3:write_bandwidth_kb: 4735.00 🟢 ( previous job: 4404.00, improvement: 107.52%)
  • fedora-44-xfce_root_seq1m_q8t1_read 3:read_bandwidth_kb: 407847.00
  • fedora-44-xfce_root_seq1m_q8t1_write 3:write_bandwidth_kb: 105924.00
  • fedora-44-xfce_root_seq1m_q1t1_read 3:read_bandwidth_kb: 241774.00
  • fedora-44-xfce_root_seq1m_q1t1_write 3:write_bandwidth_kb: 48452.00
  • fedora-44-xfce_root_rnd4k_q32t1_read 3:read_bandwidth_kb: 82120.00
  • fedora-44-xfce_root_rnd4k_q32t1_write 3:write_bandwidth_kb: 3348.00
  • fedora-44-xfce_root_rnd4k_q1t1_read 3:read_bandwidth_kb: 6937.00
  • fedora-44-xfce_root_rnd4k_q1t1_write 3:write_bandwidth_kb: 443.00
  • fedora-44-xfce_private_seq1m_q8t1_read 3:read_bandwidth_kb: 288387.00
  • fedora-44-xfce_private_seq1m_q8t1_write 3:write_bandwidth_kb: 165232.00
  • fedora-44-xfce_private_seq1m_q1t1_read 3:read_bandwidth_kb: 338577.00
  • fedora-44-xfce_private_seq1m_q1t1_write 3:write_bandwidth_kb: 98163.00
  • fedora-44-xfce_private_rnd4k_q32t1_read 3:read_bandwidth_kb: 89320.00
  • fedora-44-xfce_private_rnd4k_q32t1_write 3:write_bandwidth_kb: 1635.00
  • fedora-44-xfce_private_rnd4k_q1t1_read 3:read_bandwidth_kb: 6775.00
  • fedora-44-xfce_private_rnd4k_q1t1_write 3:write_bandwidth_kb: 1102.00
  • fedora-44-xfce_volatile_seq1m_q8t1_read 3:read_bandwidth_kb: 366378.00
  • fedora-44-xfce_volatile_seq1m_q8t1_write 3:write_bandwidth_kb: 133363.00
  • fedora-44-xfce_volatile_seq1m_q1t1_read 3:read_bandwidth_kb: 309679.00
  • fedora-44-xfce_volatile_seq1m_q1t1_write 3:write_bandwidth_kb: 14663.00
  • fedora-44-xfce_volatile_rnd4k_q32t1_read 3:read_bandwidth_kb: 84000.00
  • fedora-44-xfce_volatile_rnd4k_q32t1_write 3:write_bandwidth_kb: 2595.00
  • fedora-44-xfce_volatile_rnd4k_q1t1_read 3:read_bandwidth_kb: 8515.00
  • fedora-44-xfce_volatile_rnd4k_q1t1_write 3:write_bandwidth_kb: 1221.00
  • debian-13-xfce_dom0-dispvm-api (mean:6.456): 77.47 🔻 ( previous job: 74.50, degradation: 104.00%)
  • debian-13-xfce_dom0-dispvm-preload-2-api (mean:3.315): 39.78 🔻 ( previous job: 37.79, degradation: 105.27%)
  • debian-13-xfce_dom0-dispvm-preload-2-delay-0-api (mean:2.969): 35.63 🔻 ( previous job: 34.29, degradation: 103.90%)
  • debian-13-xfce_dom0-dispvm-preload-2-delay-minus-1d2-api (mean:3.511): 42.13 🔻 ( previous job: 38.52, degradation: 109.39%)
  • debian-13-xfce_dom0-dispvm-preload-4-api (mean:2.458): 29.49 🟢 ( previous job: 30.73, improvement: 95.96%)
  • debian-13-xfce_dom0-dispvm-preload-4-delay-0-api (mean:2.554): 30.65 🔻 ( previous job: 29.50, degradation: 103.91%)
  • debian-13-xfce_dom0-dispvm-preload-4-delay-minus-1d2-api (mean:2.562): 30.75 🔻 ( previous job: 28.74, degradation: 106.99%)
  • debian-13-xfce_dom0-dispvm-preload-2-gui-api (mean:4.914): 58.96 🔻 ( previous job: 53.65, degradation: 109.90%)
  • debian-13-xfce_dom0-dispvm-preload-4-gui-api (mean:3.733): 44.79 🔻 ( previous job: 44.40, degradation: 100.88%)
  • debian-13-xfce_dom0-dispvm-preload-6-gui-api (mean:3.011): 36.13 🟢 ( previous job: 41.47, improvement: 87.13%)
  • debian-13-xfce_dom0-vm-api (mean:0.029): 0.34 🟢 ( previous job: 0.62, improvement: 55.32%)
  • debian-13-xfce_dom0-vm-gui-api (mean:0.031): 0.37 🟢 ( previous job: 0.47, improvement: 78.92%)
  • fedora-44-xfce_dom0-dispvm-api (mean:8.834): 106.01
  • fedora-44-xfce_dom0-dispvm-gui-api (mean:10.335): 124.02
  • fedora-44-xfce_dom0-dispvm-preload-2-api (mean:4.044): 48.53
  • fedora-44-xfce_dom0-dispvm-preload-2-delay-0-api (mean:4.054): 48.65
  • fedora-44-xfce_dom0-dispvm-preload-2-delay-minus-1d2-api (mean:4.191): 50.29
  • fedora-44-xfce_dom0-dispvm-preload-4-api (mean:2.852): 34.23
  • fedora-44-xfce_dom0-dispvm-preload-4-delay-0-api (mean:2.716): 32.59
  • fedora-44-xfce_dom0-dispvm-preload-4-delay-minus-1d2-api (mean:2.899): 34.79
  • fedora-44-xfce_dom0-dispvm-preload-2-gui-api (mean:5.478): 65.73
  • fedora-44-xfce_dom0-dispvm-preload-4-gui-api (mean:4.101): 49.21
  • fedora-44-xfce_dom0-dispvm-preload-6-gui-api (mean:3.6): 43.20
  • fedora-44-xfce_dom0-vm-api (mean:0.029): 0.35
  • fedora-44-xfce_dom0-vm-gui-api (mean:0.036): 0.44
  • whonix-workstation-18_dom0-dispvm-preload-2-api (mean:4.377): 52.52 🔻 ( previous job: 48.39, degradation: 108.54%)
  • whonix-workstation-18_dom0-dispvm-preload-2-delay-minus-1d2-api (mean:5.373): 64.47 🔻 ( previous job: 59.22, degradation: 108.88%)
  • whonix-workstation-18_dom0-dispvm-preload-4-delay-0-api (mean:3.489): 41.86 🟢 ( previous job: 43.23, improvement: 96.83%)
  • whonix-workstation-18_dom0-dispvm-preload-2-gui-api (mean:6.094): 73.12 🔻 ( previous job: 72.05, degradation: 101.49%)
  • whonix-workstation-18_dom0-dispvm-preload-4-gui-api (mean:4.764): 57.17 🔻 ( previous job: 52.81, degradation: 108.26%)
  • whonix-workstation-18_dom0-dispvm-preload-6-gui-api (mean:4.192): 50.31 🟢 ( previous job: 50.72, improvement: 99.19%)
  • whonix-workstation-18_dom0-vm-api (mean:0.035): 0.42 🟢 ( previous job: 0.43, improvement: 96.07%)

@iasds
iasds force-pushed the fix/nonblocking-trigger-reads-main branch from fb73fb5 to 098c931 Compare July 29, 2026 06:13
@marmarek
marmarek merged commit e1314d9 into QubesOS:main Jul 30, 2026
4 of 6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

qrexec-agent: an incomplete local trigger request blocks the main event loop

3 participants