Skip to content

fix: Race-Condition behebt Rezept-Verlust bei Mahlzeiten - #51

Open
fkischewski99 wants to merge 2 commits into
mainfrom
fix/recipe-persistence-race-condition
Open

fix: Race-Condition behebt Rezept-Verlust bei Mahlzeiten#51
fkischewski99 wants to merge 2 commits into
mainfrom
fix/recipe-persistence-race-condition

Conversation

@fkischewski99

@fkischewski99 fkischewski99 commented May 17, 2026

Copy link
Copy Markdown
Owner

Summary

  • Mutex in SharedEventViewModel.onAction(): Alle State-Mutationen werden jetzt serialisiert. Der State wird erst innerhalb des Locks gelesen, sodass parallele Aktionen sich nicht mehr gegenseitig überschreiben.
  • SaveMeal wird vor Navigation abgewartet (NewMealPage): Statt fire-and-forget wird saveMealAndAwait() aufgerufen und erst nach erfolgreichem Firebase-Write navigiert.
  • UpdateAllMeals wird vor Navigation abgewartet (ParticipantPage): Reihenfolge korrigiert (vorher: GoBack → UpdateAllMeals, jetzt: UpdateAllMeals → GoBack) und Save wird abgewartet.

Ursache

Aktionen im SharedEventViewModel starteten unabhängige Coroutines, die jeweils den State vor dem launch lasen. Bei schneller Navigation oder schlechtem Internet überschrieb die zweite Aktion das Ergebnis der ersten — Rezeptdaten gingen verloren.

Test plan

  • Rezepte zu mehreren Mahlzeiten hinzufügen, schnell zwischen Mahlzeiten navigieren, App neustarten → Rezepte prüfen
  • Teilnehmerseite öffnen, Teilnehmer hinzufügen, zurück navigieren → Mahlzeiten-Rezepte prüfen
  • Im Emulator mit "Poor" Network-Typ testen
  • Bestehende Tests laufen (./gradlew :composeApp:testDebugUnitTest)

Actions in SharedEventViewModel were dispatching parallel coroutines that
captured stale state, causing later writes to overwrite earlier ones.
Additionally, SaveMeal and UpdateAllMeals were fire-and-forget — navigation
happened before Firebase writes completed.

Fix: Add Mutex to serialize state mutations in onAction(), and await
save operations before navigating away from meal and participant screens.
@fkischewski99 fkischewski99 changed the title fix: resolve race condition causing recipes to disappear from meals fix: Race-Condition behebt Rezept-Verlust bei Mahlzeiten May 17, 2026
Revert the onNavigateBack parameter changes and keep the original
onAction pattern. The Mutex in onAction() is the core fix. Fixed
the action order in ParticipantPage (UpdateAllMeals before GoBack).
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