Skip to content

Neustart startet die Fassung, die gestartet wurde, nicht die laufende - #20

Merged
oe5sos merged 1 commit into
mainfrom
fix/neustart-mit-pfad
Sep 30, 2026
Merged

oe5sos merged 1 commit into
mainfrom
fix/neustart-mit-pfad

Conversation

@oe5sos

@oe5sos oe5sos commented Sep 30, 2026

Copy link
Copy Markdown
Owner

Worum es geht

Beim Nachstellen des Absturzes aus #19 aufgefallen: Startet man eine Fassung mit anderem Baustempel, während eine läuft, startet sich die laufende neu – aber mit ihrem eigenen Programmpfad (applicationFilePath()). Das stimmt nur, wenn am selben Ort neu gebaut oder installiert wurde. Lag die neue Fassung daneben (28.09.: /Applications/Contestprogramm-neu.app neben /Applications/Contestprogramm.app), beendete sich die neue, und die alte kam als alte Fassung wieder.

Änderung

  • Die zweite Instanz schickt zusätzlich ihren absoluten Programmpfad: raise <stempel> <pfad>\n. Der Pfad ist prozentkodiert (Leerzeichen) und wird nur zusammen mit einem Stempel geschickt.
  • newerBuildStarted(const QString& program) reicht ihn weiter; main.cpp startet genau diesen Pfad. Ohne Pfad – oder wenn der Start scheitert – wie bisher applicationFilePath().
  • Der Empfänger übernimmt nur einen absoluten Pfad auf eine ausführbare Datei, alles andere fällt auf den eigenen Pfad zurück.
  • Der Empfänger liest ganze Zeilen (canReadLine/readLine) statt readAll(): Mit Pfad ist die Zeile lang genug, um in zwei Stücken anzukommen. Alle bisherigen Fassungen schließen mit \n ab (raise\n seit e894a4a, raise <stempel>\n seit ade8b65).
  • Baut auf Absturz beim Start einer zweiten Fassung neben der laufenden behoben #19 auf (release() → deleteLater), das aus dem Signal heraus aufgerufen wird.

Abwärtskompatibel: raise und raise <stempel> älterer Fassungen funktionieren weiter. Umgekehrt kann eine laufende 0.1.1 den Pfad nicht auswerten – dort bleibt es beim alten Verhalten, bis diese Fassung einmal läuft.

Tests (tests/test_single_instance.cpp)

  • theRestartGetsTheProgramTheNewerBuildWasStartedAs – Pfad mit Leerzeichen („Contestprogramm neu.app/…") kommt unverändert an; eine Kopie mit gleichem Stempel wird nur nach vorne geholt. Gegenprobe: ohne gesendeten Pfad rot.
  • anOlderBuildsHandOverWithoutAProgramStillWorks – Rohzeilen raise 2000\n (Neustart, leerer Pfad, „ok" kommt zurück) und raise\n (nur nach vorne).
  • aHandedPathThatIsNotAProgramIsDropped – fehlende Datei, Verzeichnis, relativer Pfad → leer.

Live geprüft (macOS, CONTESTPROGRAMM_DATA_DIR im Scratchpad)

  1. Fassung A aus …/Programme/Contestprogramm.app gestartet (PID 18304).
  2. Fassung B aus …/Programme/Contestprogramm neu.app (anderer Stempel) gestartet → B beendet sich mit 0, A beendet sich, Nachfolger PID 18380 läuft aus Contestprogramm neu.app.
  3. B nochmal gestartet (gleicher Stempel wie der Nachfolger) → nur nach vorne geholt, 18380 läuft weiter, eine Instanz.
  4. Eigene Prozesse per PID beendet; echte Datenbank unter ~/Library/Application Support unverändert (md5 und mtime).

🤖 Generated with Claude Code

Eine zweite Fassung mit anderem Baustempel ließ die laufende sich neu
starten -- mit deren eigenem Programmpfad. Lag die neue Fassung daneben
(28.09.: Contestprogramm-neu.app neben Contestprogramm.app), beendete
sich die neue, und die alte kam als alte Fassung wieder.

Die zweite Instanz schickt jetzt zusätzlich ihren absoluten Programmpfad
("raise <stempel> <pfad>\n", Pfad prozentkodiert wegen Leerzeichen).
newerBuildStarted(program) reicht ihn weiter, main.cpp startet genau
diesen Pfad; ohne Pfad, oder wenn er sich nicht starten lässt, wie
bisher applicationFilePath().

Abwärtskompatibel: "raise" und "raise <stempel>" älterer Fassungen
funktionieren weiter. Der Empfänger liest jetzt ganze Zeilen (alle
Fassungen schicken '\n'), und übernimmt nur einen absoluten Pfad auf
eine ausführbare Datei.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@oe5sos
oe5sos merged commit d01edb8 into main Sep 30, 2026
5 checks passed
@oe5sos
oe5sos deleted the fix/neustart-mit-pfad branch September 30, 2026 06:42
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