View Issue Details

IDProjectCategoryView StatusLast Update
0002201EresseaGeneralpublic2017-12-05 18:50
ReporterEnno Assigned ToEnno  
PriorityhighSeveritycrashReproducibilityalways
Status closedResolutionfixed 
Product Version3.8.7 
Target Version3.8.8Fixed in Version3.8.8 
Summary0002201: E3 Absturz am 2. April 2016
Description

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

Steps To Reproduce

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.

Additional Information

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.

TagsNo tags attached.
Faction0
GameE3
Report351

Activities

Enno

Enno

2016-04-03 10: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 10: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 10:45

administrator   ~0006521

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

Enno

Enno

2016-04-03 11:54

administrator   ~0006529

Auswertung ist raus.

Issue History

Date Modified Username Field Change
2016-04-03 10:06 Enno New Issue
2016-04-03 10:06 Enno Status new => assigned
2016-04-03 10:06 Enno Assigned To => Enno
2016-04-03 10:14 Enno Note Added: 0006518
2016-04-03 10:16 Enno Note Added: 0006519
2016-04-03 10:45 Enno Note Added: 0006521
2016-04-03 10:45 Enno Target Version => 3.8.8
2016-04-03 11:54 Enno Note Added: 0006529
2016-04-03 11:54 Enno Status assigned => resolved
2016-04-03 11:54 Enno Fixed in Version => 3.8.8
2016-04-03 11:54 Enno Resolution open => fixed
2017-12-05 18:50 Enno Status resolved => closed