Eintragsdetails ansehen

IDProjektKategorieSichtbarkeitZuletzt aktualisiert
0002201EresseaGeneralöffentlich2017-12-05 19:50
ReporterEnno Bearbeitung durchEnno  
PrioritäthochSchweregradAbsturzReproduzierbarimmer
Status geschlossenLösungerledigt 
Produktversion3.8.7 
Zielversion3.8.8Behoben in Version3.8.8 
Zusammenfassung0002201: E3 Absturz am 2. April 2016
Beschreibung

eressea: /home/eressea/eressea/git/src/kernel/faction.c:337: write_faction_reference: Assertion `!f || f->_alive' failed.

Schritte zur Reproduktion

Das Pentagramm stirbt diese Woche, und der Code, der die Alliierten schreibt, fällt auf die Fresse. Nach destroyfaction ist noch eine Referenz auf die Partei in f->allies für die Abenteurer von Albernia (ava), aber der Speicher dahinter ist bogus.

Zusätzliche Informationen

Eigentlich sollte destroyfaction die Partei nicht löschen, d.h. der Speicher noch stimmen. Es sollte allerdings auch die Allianz-Beziehung lösen, glaube ich. Mal gucken.

TagsKeine Tags zugeordnet.
Partei0
SpielE3
Report351

Notizen / Dateien

Enno

Enno

2016-04-03 12:14

Administrator   ~0006518

Das erste Problem ist, dass write_game mit remove_empty_factions beginnt, welches sowohl destroyfaction als auch free(f) aufruft, damit ist der Speicher dann also zum Zeitpunkt des späteren Zugriffs unbrauchbar. Das muss evtl. nicht gemacht werden, denn die Partei ist ja nach destroyfaction nicht mehr in der Parteien-Liste, wird also eh nicht ins Datenfile geschrieben.

Zweites Problem: setalliance(f, NULL) wird in destroyfaction nur gemacht, wenn die Partei der Anführer der Allianz ist. DAs löscht sie dann nicht aus der Liste, warum auch immer. Ich glaube, die Bedingung kann da einfach weg.

Enno

Enno

2016-04-03 12:16

Administrator   ~0006519

Oh, Konfusion. Der Crash ist wegen f->allies, nicht f->alliance. Das ist der HELFE Status, da löscht die Partei natürlich niemand raus (das Reverse Lookup dafür ist zu aufwändig). D.h. die Partei muss zum Zeitpunkt von write_game noch existieren, und f->_alive gecheckt werden.

Enno

Enno

2016-04-03 12:45

Administrator   ~0006521

Ich habe es. https://github.com/eressea/server/pull/507

Enno

Enno

2016-04-03 13:54

Administrator   ~0006529

Auswertung ist raus.

Eintrags-Historie

Änderungsdatum Benutzername Feld Änderung
2016-04-03 12:06 Enno Neuer Eintrag
2016-04-03 12:06 Enno Status neu => zugewiesen
2016-04-03 12:06 Enno Bearbeitung durch => Enno
2016-04-03 12:14 Enno Notiz hinzugefügt: 0006518
2016-04-03 12:16 Enno Notiz hinzugefügt: 0006519
2016-04-03 12:45 Enno Notiz hinzugefügt: 0006521
2016-04-03 12:45 Enno Zielversion => 3.8.8
2016-04-03 13:54 Enno Notiz hinzugefügt: 0006529
2016-04-03 13:54 Enno Status zugewiesen => erledigt
2016-04-03 13:54 Enno Behoben in Version => 3.8.8
2016-04-03 13:54 Enno Lösung offen => erledigt
2017-12-05 19:50 Enno Status erledigt => geschlossen