Skip to content

qui-domains: adapt shutdown dialog to exception type#308

Merged
marmarek merged 1 commit into
QubesOS:mainfrom
Jayant-kernel:fix-shutdown-dialog-exception-10650
Apr 7, 2026
Merged

qui-domains: adapt shutdown dialog to exception type#308
marmarek merged 1 commit into
QubesOS:mainfrom
Jayant-kernel:fix-shutdown-dialog-exception-10650

Conversation

@Jayant-kernel
Copy link
Copy Markdown

The shutdown error dialog always showed "Do you want to force shutdown?" regardless of which exception was raised. A QubesVMShutdownTimeoutError would offer force shutdown even though retrying normal shutdown is more appropriate, and any other error would not offer kill, which is the correct last-resort action.

Adapt the dialog text, title, and action button based on the exception type:

  • QubesVMInUseError: warn about connected qubes, offer Force shutdown (vm.shutdown(force=True))
  • QubesVMShutdownTimeoutError: note the timeout, offer Retry shutdown (vm.shutdown(force=False))
  • Any other QubesException: show the error, offer Kill (vm.kill())

Fixes: QubesOS/qubes-issues#10650

@Jayant-kernel
Copy link
Copy Markdown
Author

@marmarek
please review the pr

@codecov
Copy link
Copy Markdown

codecov Bot commented Mar 27, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 92.99%. Comparing base (d56bb9e) to head (c2110b7).
⚠️ Report is 6 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #308   +/-   ##
=======================================
  Coverage   92.99%   92.99%           
=======================================
  Files          64       64           
  Lines       13312    13313    +1     
=======================================
+ Hits        12379    12380    +1     
  Misses        933      933           

☔ View full report in Codecov by Sentry.
📢 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 qui/tray/domains.py Outdated
self.vm.shutdown(force=True)
elif action == "retry":
self.vm.shutdown(force=False)
else:
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.

It would be safer if this would also check for kill explicitly, to avoid killing a qube just because somebody made a typo elsewhere in this file.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

@marmarek done the changes

@Jayant-kernel Jayant-kernel force-pushed the fix-shutdown-dialog-exception-10650 branch from 99eaaf1 to 66ea33e Compare March 28, 2026 02:53
@marmarta
Copy link
Copy Markdown
Member

I think that an option to kill the VM should also be available if timeout failed? Especially if timeout failed multiple times, it might suggest something is deeply wrong and killing is the correct behavior.

(This sounds very bad out of context :D)

@Jayant-kernel
Copy link
Copy Markdown
Author

@marmarta
Fixed the widget.destroy() was only reached when the user clicked an action button.
Canceling returned early and left the dialog open.
Moved destroy() into the early-return path so Cancel closes the dialog too.

@qubesos-bot
Copy link
Copy Markdown

qubesos-bot commented Mar 30, 2026

OpenQA test summary

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

Test run included the following:

New failures, excluding unstable

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

  • system_tests_whonix

    • whonixcheck: wait_serial (wait serial expected)
      # wait_serial expected: qr/0rW7l-\d+-/...
  • system_tests_pvgrub_salt_storage

    • 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_fedora-43-xfce: test_000_standalone_vm (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

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

  • system_tests_extra

    • TC_00_QVCTest_fedora-43-xfce: test_010_screenshare (failure + cleanup)
      AssertionError: 2.104448859803078 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_qwt_win11@hw13

    • windows_install: wait_serial (wait serial expected)
      # wait_serial expected: qr/install-complete-\d+-/...
  • 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' ...
  • 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...

Failed tests

20 failures
  • system_tests_whonix

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

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

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

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

    • whonixcheck: wait_serial (wait serial expected)
      # wait_serial expected: qr/0rW7l-\d+-/...

  • system_tests_pvgrub_salt_storage

    • 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_debian-13-xfce: test_011_template_based_vm_dracut (error)
      qubes.exc.QubesVMError: Cannot connect to qrexec agent for 120 seco...

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

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

  • system_tests_extra

    • TC_01_InputProxyExclude_debian-13-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: 2.104448859803078 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_qwt_win10_seamless@hw13

    • windows_install: Failed (test died)
      # Test died: Install failed with code 1 at qubesos/tests/windows_in...
  • system_tests_qwt_win11@hw13

    • windows_install: wait_serial (wait serial expected)
      # wait_serial expected: qr/install-complete-\d+-/...

    • windows_install: Failed (test died + timed out)
      # Test died: Install timed out at qubesos/tests/windows_install.pm ...

  • 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' ...
  • 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...

Fixed failures

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

28 fixed
  • system_tests_network

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

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

    • VmNetworking_debian-13-xfce: test_203_fake_ip_inter_vm_allow (failure)
      ^... AssertionError: 1 != 0

  • system_tests_pvgrub_salt_storage

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

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

  • system_tests_gui_interactive

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

    • collect_logs: Failed (test died + timed out)
      # Test died: command 'curl --form upload=@journalctl.log --form upn...

  • system_tests_network_ipv6

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

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

    • VmIPv6Networking_fedora-42-xfce: test_113_reattach_after_provider_kill (failure)
      ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^... AssertionError: 1 != 0

  • system_tests_network_updates

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

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

    • TC_00_Dom0Upgrade_whonix-gateway-18: test_020_install_wrong_sign (error)
      subprocess.CalledProcessError: Command 'timeout=120; while ! tor-ci...

    • TC_11_QvmTemplateMgmtVM_debian-13-xfce: test_000_template_list (failure)
      qvm-template: error: No matching templates to list

    • TC_11_QvmTemplateMgmtVM_debian-13-xfce: test_010_template_install (failure)
      qvm-template: error: Template 'debian-12-minimal' not found.

    • TC_11_QvmTemplateMgmtVM_fedora-42-xfce: test_000_template_list (failure)
      qvm-template: error: No matching templates to list

    • TC_11_QvmTemplateMgmtVM_fedora-42-xfce: test_010_template_install (failure)
      qvm-template: error: Template 'debian-12-minimal' not found.

    • TC_11_QvmTemplateMgmtVM_whonix-gateway-18: test_000_template_list (failure)
      qvm-template: error: No matching templates to list

    • TC_11_QvmTemplateMgmtVM_whonix-gateway-18: test_010_template_install (failure)
      qvm-template: error: Template 'debian-12-minimal' not found.

  • system_tests_kde_gui_interactive

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

    • collect_logs: Failed (test died + timed out)
      # Test died: command 'curl --form upload=@journalctl.log --form upn...

  • system_tests_guivm_vnc_gui_interactive

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

    • collect_logs: Failed (test died + timed out)
      # Test died: command 'curl --form upload=@journalctl.log --form upn...

  • system_tests_audio

    • 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_whonix-workstation-18: test_225_audio_rec_unmuted_hvm (failure)
      AssertionError: too short audio, expected 10s, got 7.59433106575963...

    • TC_20_AudioVM_PipeWire_debian-13-xfce: test_251_audio_playback_audiovm_pipewire_late_start (failure)
      AssertionError: pacat for test-inst-vm1 (xid 48) running(False) in ...

  • system_tests_qwt_win10@hw13

    • windows_install: Failed (test died)
      # Test died: Install failed with code 1 at qubesos/tests/windows_in...

Unstable tests

Details

Performance Tests

Performance degradation:

10 performance degradations
  • debian-13-xfce_exec: 8.36 🔻 ( previous job: 7.30, degradation: 114.41%)
  • fedora-42-xfce_socket-data-duplex: 95.25 🔻 ( previous job: 84.37, degradation: 112.89%)
  • fedora-42-xfce_root_seq1m_q8t1_read 3:read_bandwidth_kb: 373424.00 🔻 ( previous job: 429744.00, degradation: 86.89%)
  • fedora-42-xfce_root_seq1m_q1t1_read 3:read_bandwidth_kb: 286809.00 🔻 ( previous job: 337488.00, degradation: 84.98%)
  • fedora-42-xfce_volatile_seq1m_q8t1_write 3:write_bandwidth_kb: 73405.00 🔻 ( previous job: 98064.00, degradation: 74.85%)
  • fedora-42-xfce_volatile_seq1m_q1t1_read 3:read_bandwidth_kb: 246665.00 🔻 ( previous job: 339454.00, degradation: 72.67%)
  • fedora-42-xfce_volatile_rnd4k_q32t1_read 3:read_bandwidth_kb: 80254.00 🔻 ( previous job: 95629.00, degradation: 83.92%)
  • fedora-42-xfce_volatile_rnd4k_q32t1_write 3:write_bandwidth_kb: 2986.00 🔻 ( previous job: 4272.00, degradation: 69.90%)
  • fedora-42-xfce_volatile_rnd4k_q1t1_read 3:read_bandwidth_kb: 7239.00 🔻 ( previous job: 8294.00, degradation: 87.28%)
  • fedora-42-xfce_volatile_rnd4k_q1t1_write 3:write_bandwidth_kb: 1016.00 🔻 ( previous job: 1434.00, degradation: 70.85%)

Remaining performance tests:

101 tests
  • debian-13-xfce_exec-root: 26.37 🟢 ( previous job: 26.58, improvement: 99.23%)
  • debian-13-xfce_socket: 8.54 🔻 ( previous job: 8.02, degradation: 106.48%)
  • debian-13-xfce_socket-root: 8.89 🔻 ( previous job: 8.38, degradation: 106.06%)
  • debian-13-xfce_exec-data-simplex: 58.74 🟢 ( previous job: 66.06, improvement: 88.92%)
  • debian-13-xfce_exec-data-duplex: 66.76 🔻 ( previous job: 61.22, degradation: 109.05%)
  • debian-13-xfce_exec-data-duplex-root: 73.19 🔻 ( previous job: 72.95, degradation: 100.33%)
  • debian-13-xfce_socket-data-duplex: 85.80 🟢 ( previous job: 86.03, improvement: 99.73%)
  • fedora-42-xfce_exec: 9.01 🟢 ( previous job: 9.09, improvement: 99.14%)
  • fedora-42-xfce_exec-root: 59.08 🔻 ( previous job: 58.88, degradation: 100.34%)
  • fedora-42-xfce_socket: 8.07 🟢 ( previous job: 8.48, improvement: 95.22%)
  • fedora-42-xfce_socket-root: 8.19 🟢 ( previous job: 8.67, improvement: 94.40%)
  • fedora-42-xfce_exec-data-simplex: 63.28 🔻 ( previous job: 61.42, degradation: 103.02%)
  • fedora-42-xfce_exec-data-duplex: 66.72 🔻 ( previous job: 65.12, degradation: 102.46%)
  • fedora-42-xfce_exec-data-duplex-root: 92.43 🔻 ( previous job: 85.37, degradation: 108.27%)
  • whonix-gateway-18_exec: 8.28 🔻 ( previous job: 7.69, degradation: 107.68%)
  • whonix-gateway-18_exec-root: 130.48 🟢 ( previous job: 132.16, improvement: 98.73%)
  • whonix-gateway-18_socket: 7.42 🟢 ( previous job: 8.05, improvement: 92.20%)
  • whonix-gateway-18_socket-root: 7.75 🔻 ( previous job: 7.16, degradation: 108.29%)
  • whonix-gateway-18_exec-data-simplex: 66.15 🔻 ( previous job: 64.40, degradation: 102.72%)
  • whonix-gateway-18_exec-data-duplex: 66.52 🔻 ( previous job: 63.65, degradation: 104.51%)
  • whonix-gateway-18_exec-data-duplex-root: 121.96 🟢 ( previous job: 123.30, improvement: 98.91%)
  • whonix-gateway-18_socket-data-duplex: 102.67 🟢 ( previous job: 113.72, improvement: 90.29%)
  • whonix-workstation-18_exec: 8.54 🔻 ( previous job: 8.20, degradation: 104.18%)
  • whonix-workstation-18_exec-root: 134.56 🟢 ( previous job: 138.84, improvement: 96.91%)
  • whonix-workstation-18_socket: 8.09 🟢 ( previous job: 8.19, improvement: 98.78%)
  • whonix-workstation-18_socket-root: 7.92 🟢 ( previous job: 8.92, improvement: 88.80%)
  • whonix-workstation-18_exec-data-simplex: 66.01 🔻 ( previous job: 63.54, degradation: 103.88%)
  • whonix-workstation-18_exec-data-duplex: 64.44 🔻 ( previous job: 59.45, degradation: 108.39%)
  • whonix-workstation-18_exec-data-duplex-root: 127.97 🟢 ( previous job: 139.63, improvement: 91.65%)
  • whonix-workstation-18_socket-data-duplex: 80.75 🟢 ( previous job: 80.77, improvement: 99.97%)
  • dom0_root_seq1m_q8t1_read 3:read_bandwidth_kb: 489759.00 🟢 ( previous job: 485002.00, improvement: 100.98%)
  • dom0_root_seq1m_q8t1_write 3:write_bandwidth_kb: 223720.00 🟢 ( previous job: 217546.00, improvement: 102.84%)
  • dom0_root_seq1m_q1t1_read 3:read_bandwidth_kb: 394795.00 🟢 ( previous job: 70705.00, improvement: 558.37%)
  • dom0_root_seq1m_q1t1_write 3:write_bandwidth_kb: 183156.00 🟢 ( previous job: 42537.00, improvement: 430.58%)
  • dom0_root_rnd4k_q32t1_read 3:read_bandwidth_kb: 103358.00 🟢 ( previous job: 12342.00, improvement: 837.45%)
  • dom0_root_rnd4k_q32t1_write 3:write_bandwidth_kb: 6976.00 🟢 ( previous job: 3011.00, improvement: 231.68%)
  • dom0_root_rnd4k_q1t1_read 3:read_bandwidth_kb: 8161.00 🟢 ( previous job: 1182.00, improvement: 690.44%)
  • dom0_root_rnd4k_q1t1_write 3:write_bandwidth_kb: 852.00 🟢 ( previous job: 793.00, improvement: 107.44%)
  • dom0_varlibqubes_seq1m_q8t1_read 3:read_bandwidth_kb: 526657.00 🟢 ( previous job: 233483.00, improvement: 225.57%)
  • dom0_varlibqubes_seq1m_q8t1_write 3:write_bandwidth_kb: 256878.00 🟢 ( previous job: 34913.00, improvement: 735.77%)
  • dom0_varlibqubes_seq1m_q1t1_read 3:read_bandwidth_kb: 395689.00 🟢 ( previous job: 370521.00, improvement: 106.79%)
  • dom0_varlibqubes_seq1m_q1t1_write 3:write_bandwidth_kb: 178495.00 🟢 ( previous job: 154458.00, improvement: 115.56%)
  • dom0_varlibqubes_rnd4k_q32t1_read 3:read_bandwidth_kb: 90485.00 🟢 ( previous job: 27602.00, improvement: 327.82%)
  • dom0_varlibqubes_rnd4k_q32t1_write 3:write_bandwidth_kb: 8705.00 🟢 ( previous job: 8434.00, improvement: 103.21%)
  • dom0_varlibqubes_rnd4k_q1t1_read 3:read_bandwidth_kb: 7621.00 🟢 ( previous job: 7112.00, improvement: 107.16%)
  • dom0_varlibqubes_rnd4k_q1t1_write 3:write_bandwidth_kb: 4428.00 🔻 ( previous job: 4565.00, degradation: 97.00%)
  • fedora-42-xfce_root_seq1m_q8t1_write 3:write_bandwidth_kb: 92783.00 🟢 ( previous job: 82944.00, improvement: 111.86%)
  • fedora-42-xfce_root_seq1m_q1t1_write 3:write_bandwidth_kb: 55175.00 🟢 ( previous job: 28744.00, improvement: 191.95%)
  • fedora-42-xfce_root_rnd4k_q32t1_read 3:read_bandwidth_kb: 80968.00 🔻 ( previous job: 82654.00, degradation: 97.96%)
  • fedora-42-xfce_root_rnd4k_q32t1_write 3:write_bandwidth_kb: 2475.00 🟢 ( previous job: 1799.00, improvement: 137.58%)
  • fedora-42-xfce_root_rnd4k_q1t1_read 3:read_bandwidth_kb: 8435.00 🔻 ( previous job: 8983.00, degradation: 93.90%)
  • fedora-42-xfce_root_rnd4k_q1t1_write 3:write_bandwidth_kb: 1143.00 🟢 ( previous job: 808.00, improvement: 141.46%)
  • fedora-42-xfce_private_seq1m_q8t1_read 3:read_bandwidth_kb: 425385.00 🟢 ( previous job: 386785.00, improvement: 109.98%)
  • fedora-42-xfce_private_seq1m_q8t1_write 3:write_bandwidth_kb: 192774.00 🟢 ( previous job: 120146.00, improvement: 160.45%)
  • fedora-42-xfce_private_seq1m_q1t1_read 3:read_bandwidth_kb: 373823.00 🟢 ( previous job: 344699.00, improvement: 108.45%)
  • fedora-42-xfce_private_seq1m_q1t1_write 3:write_bandwidth_kb: 204227.00 🟢 ( previous job: 73186.00, improvement: 279.05%)
  • fedora-42-xfce_private_rnd4k_q32t1_read 3:read_bandwidth_kb: 82393.00 🔻 ( previous job: 85237.00, degradation: 96.66%)
  • fedora-42-xfce_private_rnd4k_q32t1_write 3:write_bandwidth_kb: 2841.00 🟢 ( previous job: 2529.00, improvement: 112.34%)
  • fedora-42-xfce_private_rnd4k_q1t1_read 3:read_bandwidth_kb: 7887.00 🔻 ( previous job: 8072.00, degradation: 97.71%)
  • fedora-42-xfce_private_rnd4k_q1t1_write 3:write_bandwidth_kb: 1614.00 🟢 ( previous job: 1142.00, improvement: 141.33%)
  • fedora-42-xfce_volatile_seq1m_q8t1_read 3:read_bandwidth_kb: 361453.00 🔻 ( previous job: 378820.00, degradation: 95.42%)
  • fedora-42-xfce_volatile_seq1m_q1t1_write 3:write_bandwidth_kb: 33312.00 🟢 ( previous job: 28807.00, improvement: 115.64%)
  • debian-13-xfce_dom0-dispvm-api (mean:6.152): 73.82 🟢 ( previous job: 81.47, improvement: 90.61%)
  • debian-13-xfce_dom0-dispvm-gui-api (mean:7.702): 92.43 🔻 ( previous job: 92.38, degradation: 100.05%)
  • debian-13-xfce_dom0-dispvm-preload-2-api (mean:3.23): 38.77 🟢 ( previous job: 48.28, improvement: 80.30%)
  • debian-13-xfce_dom0-dispvm-preload-2-delay-0-api (mean:2.86): 34.32 🟢 ( previous job: 44.34, improvement: 77.39%)
  • debian-13-xfce_dom0-dispvm-preload-2-delay-minus-1d2-api (mean:3.215): 38.59 🟢 ( previous job: 54.23, improvement: 71.15%)
  • debian-13-xfce_dom0-dispvm-preload-4-api (mean:2.36): 28.32 🟢 ( previous job: 40.37, improvement: 70.15%)
  • debian-13-xfce_dom0-dispvm-preload-4-delay-0-api (mean:2.501): 30.02 🟢 ( previous job: 44.04, improvement: 68.16%)
  • debian-13-xfce_dom0-dispvm-preload-4-delay-minus-1d2-api (mean:2.404): 28.85 🟢 ( previous job: 45.36, improvement: 63.61%)
  • debian-13-xfce_dom0-dispvm-preload-2-gui-api (mean:4.946): 59.35 🔻 ( previous job: 58.18, degradation: 102.02%)
  • debian-13-xfce_dom0-dispvm-preload-4-gui-api (mean:3.829): 45.95 🔻 ( previous job: 43.54, degradation: 105.53%)
  • debian-13-xfce_dom0-dispvm-preload-6-gui-api (mean:3.201): 38.41 🟢 ( previous job: 47.37, improvement: 81.08%)
  • debian-13-xfce_dom0-vm-api (mean:0.035): 0.43 🟢 ( previous job: 0.46, improvement: 92.81%)
  • debian-13-xfce_dom0-vm-gui-api (mean:0.039): 0.46 🟢 ( previous job: 0.51, improvement: 91.68%)
  • fedora-42-xfce_dom0-dispvm-api (mean:6.587): 79.05 🟢 ( previous job: 86.95, improvement: 90.91%)
  • fedora-42-xfce_dom0-dispvm-gui-api (mean:8.291): 99.49 🟢 ( previous job: 101.79, improvement: 97.74%)
  • fedora-42-xfce_dom0-dispvm-preload-2-api (mean:3.391): 40.69 🟢 ( previous job: 51.93, improvement: 78.35%)
  • fedora-42-xfce_dom0-dispvm-preload-2-delay-0-api (mean:3.085): 37.02 🟢 ( previous job: 48.70, improvement: 76.02%)
  • fedora-42-xfce_dom0-dispvm-preload-2-delay-minus-1d2-api (mean:3.647): 43.76 🟢 ( previous job: 57.38, improvement: 76.27%)
  • fedora-42-xfce_dom0-dispvm-preload-4-api (mean:2.556): 30.67 🟢 ( previous job: 43.56, improvement: 70.41%)
  • fedora-42-xfce_dom0-dispvm-preload-4-delay-0-api (mean:2.833): 33.99 🟢 ( previous job: 43.43, improvement: 78.27%)
  • fedora-42-xfce_dom0-dispvm-preload-4-delay-minus-1d2-api (mean:2.633): 31.59 🟢 ( previous job: 47.15, improvement: 67.02%)
  • fedora-42-xfce_dom0-dispvm-preload-2-gui-api (mean:5.193): 62.31 🟢 ( previous job: 62.91, improvement: 99.06%)
  • fedora-42-xfce_dom0-dispvm-preload-4-gui-api (mean:3.858): 46.30 🟢 ( previous job: 51.39, improvement: 90.10%)
  • fedora-42-xfce_dom0-dispvm-preload-6-gui-api (mean:3.578): 42.94 🟢 ( previous job: 44.96, improvement: 95.50%)
  • fedora-42-xfce_dom0-vm-api (mean:0.039): 0.47 🔻 ( previous job: 0.43, degradation: 109.26%)
  • fedora-42-xfce_dom0-vm-gui-api (mean:0.041): 0.50 🔻 ( previous job: 0.46, degradation: 108.53%)
  • whonix-workstation-18_dom0-dispvm-api (mean:8.23): 98.76 🟢 ( previous job: 114.77, improvement: 86.05%)
  • whonix-workstation-18_dom0-dispvm-gui-api (mean:10.157): 121.88 🟢 ( previous job: 127.27, improvement: 95.76%)
  • whonix-workstation-18_dom0-dispvm-preload-2-api (mean:4.079): 48.94 🟢 ( previous job: 70.96, improvement: 68.97%)
  • whonix-workstation-18_dom0-dispvm-preload-2-delay-0-api (mean:4.002): 48.02 🟢 ( previous job: 65.29, improvement: 73.55%)
  • whonix-workstation-18_dom0-dispvm-preload-2-delay-minus-1d2-api (mean:4.909): 58.90 🟢 ( previous job: 74.32, improvement: 79.26%)
  • whonix-workstation-18_dom0-dispvm-preload-4-api (mean:3.37): 40.45 🟢 ( previous job: 57.74, improvement: 70.04%)
  • whonix-workstation-18_dom0-dispvm-preload-4-delay-0-api (mean:3.627): 43.52 🟢 ( previous job: 65.76, improvement: 66.18%)
  • whonix-workstation-18_dom0-dispvm-preload-4-delay-minus-1d2-api (mean:3.604): 43.25 🟢 ( previous job: 59.80, improvement: 72.32%)
  • whonix-workstation-18_dom0-dispvm-preload-2-gui-api (mean:5.859): 70.31 🟢 ( previous job: 78.19, improvement: 89.92%)
  • whonix-workstation-18_dom0-dispvm-preload-4-gui-api (mean:4.694): 56.33 🟢 ( previous job: 65.73, improvement: 85.70%)
  • whonix-workstation-18_dom0-dispvm-preload-6-gui-api (mean:4.001): 48.02 🟢 ( previous job: 61.35, improvement: 78.26%)
  • whonix-workstation-18_dom0-vm-api (mean:0.035): 0.42 🟢 ( previous job: 0.58, improvement: 72.92%)
  • whonix-workstation-18_dom0-vm-gui-api (mean:0.057): 0.68 🔻 ( previous job: 0.62, degradation: 108.83%)

- Show tailored dialog for QubesVMInUseError, QubesVMShutdownTimeoutError
  and generic QubesException
- Offer Retry + Kill buttons when shutdown times out
- Destroy dialog on Cancel to prevent dialog leak
- Check response type explicitly before calling kill()
Copy link
Copy Markdown
Member

@marmarek marmarek left a comment

Choose a reason for hiding this comment

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

The changes to exception handling are okay. Enforcing the timeout is broken independently (QubesOS/qubes-issues#10835), but that's for another PR.

@marmarek marmarek merged commit 3935b39 into QubesOS:main Apr 7, 2026
4 of 5 checks passed
@ben-grande
Copy link
Copy Markdown

This PR missed other places where vm.shutdown() is called: RestartItem. Can you look at that @Jayant-kernel .

@ben-grande
Copy link
Copy Markdown

Also, the buttons of the submenu should be changed to be the same as the dialog. If dialog recommends "Kill" and "Force shutdown", buttons should be adapted to it. Possibly not hiding "Shutdown", as the qube might become responsive again.

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.

Force shutdown button on qui-domains doesn't adapt to catched exception

5 participants