diff options
| author | Danilo M. <danix@danix.xyz> | 2026-09-29 17:04:06 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-09-29 17:04:06 +0200 |
| commit | 0cf2c008d46ca2e935987ecfa51a3e712d40420e (patch) | |
| tree | ac964545fad49513844a36833fc9342a833788d6 /assets/fonts/OFL-Oxanium.txt | |
| parent | e168af8d7d9a500759565719f16ed188ba8a8bcd (diff) | |
| download | qtmaildir-0cf2c008d46ca2e935987ecfa51a3e712d40420e.tar.gz qtmaildir-0cf2c008d46ca2e935987ecfa51a3e712d40420e.zip | |
feat: add the single-instance socket
A QLocalServer under the state directory. The first launch listens; a later one
connects, hands over its selectors and exits.
Connect-first ordering, and on Qt 6.11 the probe is the ONLY guard for a live
instance: with UserAccessOption, listen() binds in a private directory and
renames the socket onto the path, which replaces whatever is there, a stale
file and a live socket alike. Measured: with the probe disabled, a second
launch takes the first one's socket and both handover tests fail. The same
rename is what reclaims a stale file after a crash; the removeServer() retry
on AddressInUse is kept for a listen that binds in place.
The server reads each connection asynchronously and parses on disconnect,
rather than blocking in waitForReadyRead() on the UI thread. The client's one
write followed by a disconnect is what marks the payload complete, a reader
past the payload cap is aborted, and a connection that never hangs up is
dropped after two seconds. A connection that writes nothing at all is the other
launch's probe and is ignored without a warning.
A socket that cannot be created does NOT stop the window opening. A read-only
state directory costs single-instance behaviour, which is a degradation; it
must not cost the user their mail client.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'assets/fonts/OFL-Oxanium.txt')
0 files changed, 0 insertions, 0 deletions
