[Opstart][P1] Tweede start verdwijnt stil: Windows zonder (of met hangend) primair venster, Linux zonder bestand #2679
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
release-blocker
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck#2679
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Symptoom
De enkel-exemplaarbewaking uit #2627/#2656 kan een tweede start stil laten verdwijnen:
SendMessageW(WM_COPYDATA)..desktop). Het bestaande venster komt niet naar voren, er gebeurt zichtbaar niets. En omdat de kernel de verbinding al in de backlog accepteert, "slaagt"forwardToPrimaryook als de primaire hangt.Oorzaak
windows/runner/main.cpp:103-118: bijERROR_ALREADY_EXISTSgeldtif (HWND primary = FindPrimaryInstanceWindow()) {…}, en daarna volgt altijdreturn EXIT_SUCCESS, ook als er geen venster gevonden is.kPrimaryInstancePropwordt pas náwindow.Creategezet (r. 136-141).main.cpp:79:SendMessageWheeft geen time-out.lib/services/single_instance.dart:110:if (paths.isEmpty) return;— er is geen "activeer"-signaal.forwardToPrimary(r. 59-80) wacht op geen antwoord.Voorgestelde oplossing
FindPrimaryInstanceWindow()(bijv. 10× 300 ms). Is er dan nog niets, stop dan niet stil maar toon eenMessageBoxW: "OciDeck is nog bezig met opstarten of afsluiten — Opnieuw proberen / Annuleren". Een alternatief: start als gewoon exemplaar door. Dat is sinds het herstel-lock per sessie (#2656) veilig. Schrijf in beide gevallen een logregel.SendMessageTimeoutW(…, SMTO_ABORTIFHUNG | SMTO_BLOCK, 2000, …). Bij een time-out volgt dezelfde melding als in punt 1.window.show(); window.focus();, zoals inconfigureNativeWindow,lib/platform/native_window_io.dart:22-23) enok\nterugsturen.forwardToPrimarywacht daar hooguit 2 s op. Geen antwoord betekent dat de primaire hangt; volg dan dezelfde route als op Windows.Wat overeind moet blijven
multi_window) gaat altijd door de mutex heen.Toets
forwardToPrimarybinnen de time-outfalsegeven.ocideck.exebinnen 1 s na het sluiten van het eerste venster. Er verschijnt een venster of een melding, nooit niets.Gevonden bij codelezing tijdens de vervolginspectie van 31-10-2026.
Opgepakt. Tak: fix/vervolginspectie-3110. Verwachte reikwijdte: de bestanden die in de oorzaak van dit issue staan, plus een regressietest.
Opgepakt. Tak: fix/vervolginspectie-3110. Verwachte reikwijdte: windows/runner/main.cpp, lib/services/single_instance.dart, lib/platform/native_window_io.dart.
Staat op main in
a6b4dc066(dd8490b34). Een lege Linux-start activeert het bestaande venster; antwoordt dat niet, dan gaat de nieuwe start zelf verder en schrijft dat in het logboek. De Windows-vraag staat in windows/runner/main.cpp en is niet met een widgettest gedekt. Annuleren start geen tweede exemplaar.Opgelost op main in
a6b4dc066. De zin „een tweede start stil laten verdwijnen“ is gedekt door windows/runner/main.cpp (SendMessageTimeoutW en de melding opnieuw of annuleren) en lib/services/single_instance.dart (leeg activeerbericht, primaryDidNotAnswer). Niet meegenomen: de Windows-MessageBox draait niet onder flutter test. De Dart-toets dekt het Linux-protocol.