Crash: Promptverwaltung zweimal öffnen crasht die App #1

Closed
opened 2026-05-27 10:44:37 +00:00 by alf · 2 comments
Owner

Schritte zum Reproduzieren

  1. Chat-Fenster öffnen
  2. Im Systemprompt-Dropdown auf "Verwalten" klicken → Promptverwaltungs-Fenster öffnet sich
  3. Promptverwaltung schließen
  4. Im Dropdown erneut auf "Verwalten" klicken

Erwartetes Verhalten

Das Promptverwaltungs-Fenster öffnet sich wieder normal.

Tatsächliches Verhalten

Die Anwendung crasht.

Mögliche Ursache

Das Fenster-Objekt wird beim Schließen nicht korrekt freigegeben oder neu initialisiert, sodass beim zweiten Öffnen ein ungültiger Zustand entsteht.

## Schritte zum Reproduzieren 1. Chat-Fenster öffnen 2. Im Systemprompt-Dropdown auf **"Verwalten"** klicken → Promptverwaltungs-Fenster öffnet sich 3. Promptverwaltung **schließen** 4. Im Dropdown erneut auf **"Verwalten"** klicken ## Erwartetes Verhalten Das Promptverwaltungs-Fenster öffnet sich wieder normal. ## Tatsächliches Verhalten Die Anwendung crasht. ## Mögliche Ursache Das Fenster-Objekt wird beim Schließen nicht korrekt freigegeben oder neu initialisiert, sodass beim zweiten Öffnen ein ungültiger Zustand entsteht.
Author
Owner

Behoben in Commit 126d061300b76712255af1380ab06cc28dbe524f.

Root Cause: self.window hielt eine Referenz auf das geschlossene Fenster. Beim zweiten Öffnen versuchte showOrFocus(), dieses veraltete Fenster aufzuräumen, während SwiftUI-Teardown-Callbacks noch ausstanden → Crash.

Fix: SystemPromptManagerWindowController implementiert jetzt NSWindowDelegate. In windowWillClose wird self.window = nil gesetzt, sodass der Cleanup-Pfad beim zweiten Öffnen ein sicheres Noop ist.

Behoben in Commit `126d061300b76712255af1380ab06cc28dbe524f`. **Root Cause:** `self.window` hielt eine Referenz auf das geschlossene Fenster. Beim zweiten Öffnen versuchte `showOrFocus()`, dieses veraltete Fenster aufzuräumen, während SwiftUI-Teardown-Callbacks noch ausstanden → Crash. **Fix:** `SystemPromptManagerWindowController` implementiert jetzt `NSWindowDelegate`. In `windowWillClose` wird `self.window = nil` gesetzt, sodass der Cleanup-Pfad beim zweiten Öffnen ein sicheres Noop ist.
alf closed this issue 2026-05-27 10:51:00 +00:00
Author
Owner

Behoben und vom Nutzer bestätigt.

Root Cause: AppKit ruft intern release auf dem NSWindow auf wenn es geschlossen wird. Dadurch fiel der Retain Count auf 0 und das Objekt wurde dealloziiert — obwohl self.window eine Swift-Strong-Reference hielt. Folgender Zugriff auf isVisible → EXC_BAD_ACCESS.

Fix (Commit 71fbc27): Pattern von OnboardingWindowController übernommen:

  • panel.isReleasedWhenClosed = false — verhindert Deallokation beim Schließen
  • NSWindowDelegate.windowWillClose — setzt self.window = nil direkt auf dem MainActor (kein nonisolated, kein Task-Dispatch)
  • showOrFocus() erstellt nur ein neues Fenster wenn window == nil, sonst wird das bestehende wiederverwendet
✅ Behoben und vom Nutzer bestätigt. **Root Cause:** AppKit ruft intern `release` auf dem NSWindow auf wenn es geschlossen wird. Dadurch fiel der Retain Count auf 0 und das Objekt wurde dealloziiert — obwohl `self.window` eine Swift-Strong-Reference hielt. Folgender Zugriff auf `isVisible` → EXC_BAD_ACCESS. **Fix (Commit `71fbc27`):** Pattern von `OnboardingWindowController` übernommen: - `panel.isReleasedWhenClosed = false` — verhindert Deallokation beim Schließen - `NSWindowDelegate.windowWillClose` — setzt `self.window = nil` direkt auf dem MainActor (kein `nonisolated`, kein Task-Dispatch) - `showOrFocus()` erstellt nur ein neues Fenster wenn `window == nil`, sonst wird das bestehende wiederverwendet
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
iris/Iris#1
No description provided.