Skip to content

Cmd+Q: Hamlib-Daemon und Logbuch enden mit dem Programm - #414

Merged
oe5sos merged 2 commits into
mainfrom
fix/daemon-ueberlebt-beenden
Nov 7, 2026
Merged

oe5sos merged 2 commits into
mainfrom
fix/daemon-ueberlebt-beenden

Conversation

@oe5sos

@oe5sos oe5sos commented Nov 7, 2026 •

Copy link
Copy Markdown
Owner

Anlass

Nach dem Beenden von Longpath lief das rigctld des Begleitgeräts als Waise weiter (PPID 1) und hielt den Anschluss des TS-590 besetzt. Beim Nachsehen zeigte sich derselbe Weg beim eingebetteten Logbuch: Dessen letzte Sicherung fiel bei Cmd+Q aus.

Ursache

Gemessen mit einer kleinen Sonde (Qt 6.11, macOS):

Weg closeEvent aboutToQuit exec() kehrt zurück Destruktor atexit
Cmd+Q (NSApp terminate:) ja nein nein nein ja
QCoreApplication::quit() ja nein nein nein ja
Roter Punkt ja ja ja ja ja

Das exit() kommt noch innerhalb von closeEvent(). Das passt zu den Longpath-Logs, die direkt nach AppSettings::save() done enden. Auch aboutToQuit hätte das Problem also nicht gelöst.

Änderung

  • Daemons: HamlibDaemonProcess führt die laufenden Daemons in einer Liste, und ein atexit-Haken schickt ihnen SIGTERM. Das gilt für rigctld und rotctld. Nur Unix; unter Windows bleibt alles beim Alten.
  • Logbuch: MainWindow::closeEvent() ruft ContestFenster::schliesse() ganz hinten auf, im selben Zustand wie beim roten Punkt. Damit laufen der Abbau des Controllers, die letzte Sicherung samt zweitem Ordner und die Freigabe der Sperre.

Geprüft

  • tst_daemon_ueberlebt_beenden_nicht: Ein Helfer startet ein Doppel von rigctld und stirbt mit std::exit(). Rot gegen die alte Fassung, grün mit der Behebung.
  • tst_cmdq_schliesst_das_logbuch: schließt das echte Hauptfenster, ohne es zu zerstören. Ohne den Aufruf bleibt die Sperre stehen und der Prüfstand wird rot, mit ihm grün.
  • tst_contestfenster und tst_contest_panels_im_containers_menu lokal grün.
  • Compliance lokal grün. Zwei Skripte brauchen ../Thetis und liefen hier nicht; dieser PR fasst deren Daten nicht an.
  • Der volle Testlauf kommt aus der CI. Mit echtem Cmd+Q in Longpath ist es noch nicht gefahren.

Die Gegenstücke im Contestprogramm stehen in oe5sos/Contestprogramm#79.

🤖 Generated with Claude Code

Unter macOS enden Cmd+Q und QCoreApplication::quit() in [NSApp
terminate:] und damit in exit(), noch innerhalb von closeEvent().
aboutToQuit feuert dort nicht, und das MainWindow auf dem Stapel von
main() wird nie zerstoert. ~HamlibDaemonProcess() lief also nie: rigctld
blieb als Waise zurueck und hielt den Anschluss des TS-590 besetzt.
Dasselbe gilt fuer rotctld.

Laufende Daemons stehen jetzt in einer Liste, und ein atexit-Haken
schickt ihnen SIGTERM. Der Pruefstand stirbt mit std::exit() wie Cocoa
und ist ohne die Behebung rot.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bei Cmd+Q und quit() kommt exit() noch innerhalb von closeEvent(), und
~ContestFenster laeuft nie. Damit fiel die letzte Log-Sicherung des
eingebetteten Logbuchs aus, samt Kopie in den zweiten Ordner.

MainWindow::closeEvent() ruft schliesse() jetzt selbst, ganz hinten,
damit der Zustand derselbe ist wie beim roten Punkt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@oe5sos oe5sos changed the title Hamlib-Daemon stirbt mit dem Programm, auch bei Cmd+Q Cmd+Q: Hamlib-Daemon und Logbuch enden mit dem Programm Nov 7, 2026
@oe5sos
oe5sos merged commit e2ce8cc into main Nov 7, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant