Repository navigation
Conversation
The worker keeps its captured context, deferred authority and terminal outcome, but is now a plain callable that start_until_stopped hands the stop event; Cancel and the panel's destruction set it, and the panel stays busy until the comparison has unwound.
TabTask gains a progress signal, and start_until_stopped can hand the work a report callable. The journal reader becomes a plain callable on it, keeping its captured authority, record-boundary checkpoints and single terminal outcome.
The worker keeps its captured authority, its checkpoints and the rule that a committed export reports success, but becomes a plain callable given the stop event and a progress report; the panel stays busy until cancelled work has unwound.
The worker keeps its captured authority, its checkpoints before atomic writes and the rule that a committed transition reports success, but becomes a plain callable given the stop event and a progress report.
The worker keeps its refreshed authority, secret masking and guarded delivery, but becomes a plain callable given the stop event. No GUI module outside the task controllers calls start_worker any more.
Only Diagnostics published execution details. Every page's background work now runs on TabTask, so the task publishes it for the page it runs on: running, stopping, then succeeded, cancelled or the error, with reported progress. Also fix the thumbnail probe that still read the attribute removed when the poll became a task.
A page waiting for its first command showed a blank grid, with nothing to tell an empty result from one still to come. The workspace now gives every item view an empty state that hides as soon as a row arrives.
A failure or an RBAC refusal showed only in each panel's own status line, if it had one. A banner under the page header now reports the last failed run, and inside an RBAC scope names the commands the active role cannot run.
Measured against main, the redesigned GUI starts in 1.37 s instead of 2.10 s with 115 MB instead of 179 MB, but a theme switch with every tab open took 1.9 s: the window's style sheet was set twice, once for the theme and again for the font. Setting it once brings it to 0.95 s. Add the feature parity gate the F4 plan called for.
The freed-thread-state abort seen on Windows 3.14.8 left only the Python lines faulthandler prints; Linux jobs already run under GDB. Windows Error Reporting now writes a minidump of a crashed python.exe into the native artifact the job retains after a failure.
Stopping a host or closing a viewer joins its threads for up to two seconds, and Quick Connect and the Viewer tab did both in the button slot. The registry can now free a slot at once and hand back the blocking shutdown, which runs on a worker; a new connect closes the session it replaces on its own worker before connecting.
Once begun, a TCP or WebSocket upload streamed to its last byte even after the page closed or the session was dropped. send_file now checks between chunks and, once stopped, sends a cancelled end so the host discards the partial file.
A session being replaced closes on a worker while the next connects; its last frames painted into the new window and its closing error ran Disconnect, which closed the new session. Each session's callbacks now carry its number, and only the current session's land.
The host panel dropped offers and disconnected sessions by id, resolved only when the background stop ran, and a dropped offer could stop its session on the GUI thread. It now uses the owned offers and retirements the host already offers. A peer that failed to build also left its token, subscription and a fresh screen source behind.
StopQueue and stop_each logged a stop that raised and dropped it, so a session, recorder or host a panel had let go of could stay open with nothing owning it. Failed stops are now kept with their error and the authority they were queued under, and Diagnostics lists and retries them.
Stops outside a StopQueue were still only reported or logged. A SlowOp stop now opts into the stop custody as well as telling its panel, and the WebRTC host keeps a dropped offer's or a disconnected session's stop that failed; a start is never kept.
The advertiser stop logged a pending or uncertain retirement at debug level and dropped the advertiser that still owned the name, and a recording whose finalising raised left Record disabled with no outcome shown. The advertiser now goes to the stop custody, and the recording says it may be incomplete.
The Browse LAN dialog joined zeroconf's thread on the GUI thread, swallowed a failed stop, and handed the browser a bound method that kept the dialog alive. The browser now reports through a weak lease, and its stop runs on an application-owned queue whose failures still reach the stop custody after the dialog is gone.
A cancellation that cuts a media cleanup short carries the original owners still holding resources, but the GUI kept only the outer stop. Each attached owner is now kept by the stop custody with its own stop.
Reading a media owner's live retirement status can wait on the lock its native cleanup holds. The custody now keeps the status the error captured when it was raised, and Diagnostics shows that instead.
A full stop waits on native work under the owner's lock, and a caller whose authority was revoked may never run it; until then the owner kept admitting audio, reports, sessions and input. close_admission() only stops admission, with no native call or cleanup lock, and StopQueue calls it on every owner before queuing the stop.
A GUI task's Stop or deadline cancelled its scope, but the HTTP helper and the signaling long-polls never looked at it, and stopping the WebRTC host left its publish loop waiting up to ten minutes for an answer. perform_call now checks the scope around each request, and the waits check their stop between polls.
A Qt connection holds its slot from C++, out of the collector's sight. The Script Builder connected a lambda over self to each of its 714 Add-step actions, so every tab built lived until exit, where Qt's teardown released the closure inside a destructor and deleted the tab a second time. Those slots, and the similar ones in four other tabs, are now methods or weak references.
The pin to 6.11.2 waited on finding what crashed the test process at interpreter exit under 6.12. That was tabs kept alive by slots holding themselves, fixed on dev; this branch runs the full matrix on 6.12.0 before the pin moves.
Every 3.12 to 3.14 square passed and exited cleanly on 6.12.0, but both 3.11 squares still abort: a None refcount underflow that is harmless where None is immortal. The pin now takes 6.12.0 only from 3.12 on.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Do not merge. A CI-only trial that runs
docker.ymlandstable.ymlon PySide6 6.12.0; it is closed once their results are in. The change itself is reviewed in draft PR #554 (trial/pyside6-6.12 → dev), and reaches main through PR #552 only if every square exits cleanly.It carries the dev commits PR #552 carries, plus one commit moving the
guipin from PySide6 6.11.2 to 6.12.0 (and dropping the dependabot ignore). The exit crash that held the pin back -- tabs kept alive by slots holding themselves, deleted twice in Qt's teardown -- is fixed on dev in 553096a.