Deutsches Simutransforum

Normale Version: Fenster über den Rand hinaus schieben -> Absturz
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Simutrans-Version:
101, war aber schon in 100 so

PAK-Set (+zusätzliche PAK-Dateien):
Tritt sowohl mit pak64-101 als auch mit pak128-1.4.4 auf

Betriebssystem:
Linux (Ubuntu Intrepid AMD64)

Fehler (möglichst genaue Beschreibung):
Wenn ich das Spielfenster maximiert habe und dann ein In-Game-Fenster schnell gegen den rechten Rand hin schiebe, stürzt ST ab. gdb sagt dazu folgendes:
Zitat:Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7f70e83486f0 (LWP 8630)]
0x00000000005cf463 in pixcopy (dest=0x7f70e198015e, src=0x2cc0000, len=4294967270) at simgraph16.cc:1516
1516 while (dest < end) *dest++ = *src++;
Verhalten (Absturz, Einfrieren, ...):
Absturz. Mehr oder weniger reproduzierbar; passiert nicht jedesmal, aber wenn man wiederholt ein Fenster schnell gegen den rechten Rand schiebt, sollte durchschnittlich nach 5-6 mal ein Absturz eintreten. Ich habe den Verdacht, dass die Absturzwahrscheinlichkeit höher ist, wenn mehr (In-Game-)Fenster geöffnet sind oder mehr los ist auf der Karte (funktioniert aber auch auf leeren Karten).

Falls sich der Bug nicht beheben lässt, würde eine Autosave-Funktion den jeweiligen Ärger über das Auftreten doch bedeutend verringern.

Dwachs

konnte ich nicht reproduzieren. Was hast du denn fuer eine Aufloesung? Passiert das mit allen moeglichen Fenstern oder nur einem bestimmten?

Was ich nur beobachten konnte, war, dass manchmal beim Schieben eines Fensters nach rechts unten am linken Rand graue Pixel-Artefakte kamen. Die waren aber nur einen Pixel breit. Auch das passierte nicht immer.
Kann ich auch nicht reproduzieren (openSuSE 11.1, KDE 4, 32bit - ich nehme an, Du hast eine 64bit-Version?). Hast Du das Fenster, in dem Simutrans läuft, maximiert oder hast Du Simutrans als Vollbild gestartet?

Wenn Du den Absturz reproduzieren kannst, starte so:

./simutrans -debug

dann erscheinen die Fehlermeldungen im Terminal, und die letzten Zeilen vor dem Absturz sind sehr hilfreich.

Dwachs

Das Zitat da oben ist ja schon hilfreich. Der Fehler tritt in der Pixel-Kopierroutine auf, es wird ueber den zu Verfuegung stehenden Platz hinausgeschrieben.

Es wird sich wohl um einen Overflow in der 32bit-Variablen len handeln: len war eigentlich negativ, wird in einen unsigned int umgewandelt und deshalb ziemlich gross.
Noch zum Thema Autosave!
Das gibt es schon lange.
Editiere hierzu die Datei simuconf.tab des entsprechenden pak-sets, dass du gerade spielst. Da sollte es eine Zeile geben:
autosave = 0
Einfach auf
autosave = 1
ändern, und es wird jeweils zu Monatsbeginn ein Spielstand gespeichert.

vgl. auch http://simutrans-germany.com/wiki/wiki/t..._speichern

Dwachs

Zitat:Original von Dwachs
Was ich nur beobachten konnte, war, dass manchmal beim Schieben eines Fensters nach rechts unten am linken Rand graue Pixel-Artefakte kamen. Die waren aber nur einen Pixel breit. Auch das passierte nicht immer.
Gut zu beobachten, wenn man die Karte nach rechst schiebt und links dann blaues Wasser ist. Oder das Linienmanager-Fenster laaangsam nach rechts raus schieben, dann erscheinen die senkrechten weissen Linien nochmal kurz am linken Rand.

Das liegt wohl daran, dass die clipping-Abfragen in simgraph16.cc nicht immer richtig sind:
ein pixel mit Koordinate xp wird angezeigt, falls
Code:
clip. x <= xp < clip.xx
der rechte Rand von einem Bild das w Pixel breit ist und an Stelle xp kommt wird angezeigt falls
Code:
clip.x < xp+w <= clip.xx
man beachte den Unterschied zwischen den beiden Abfragen. Das wurde in simgraph16.cc nicht konsequent durchgehalten.

Patch folgt in der Mittagspause ^^

Was diese Beobachtung allerdings mit dem Absturz von Sam zutun hat? k.A.

Dwachs

Patch und Linux-Executable sind hier verfuegbar:

Linux Executable fuer gcc4

Patch-File

@Sam: kannst du mal testen, ob der Absturz wieder kommt?
Zitat:Original von Gotthardlok
Wenn Du den Absturz reproduzieren kannst, starte so:

./simutrans -debug

dann erscheinen die Fehlermeldungen im Terminal, und die letzten Zeilen vor dem Absturz sind sehr hilfreich.
Ich denke nicht.
Zitat:Message: wkz_abfrage(): checking map square 24,150
Message: wkz_abfrage(): index 0
Message: create_win(): ins_win=12
Message: create_win(): new ins_win=13
Message: top_win(): win=12 ins_win=13
Message: top_win(): win=12 ins_win=13
Message: top_win(): win=12 ins_win=13
Message: top_win(): win=12 ins_win=13
Segmentation fault
-> der gdb-Output scheint mir da aussagekräftiger zu sein. Mit Patch geschieht genau dasselbe; ich habe beim erneuten Testen aber den Eindruck bekommen, dass der Fehler mit pak128 schneller auftritt und auch da auf einer neuen Karte erst, wenn man zuerst auf dem Spielfeld hin- und hergescrollt ist (was im Spiel ja sowieso der Fall ist, aber nicht unbedingt, wenn man den Bug zu reproduzieren versucht).

@HomerSimpson: Oh. Vielleicht sollte ich etwas mehr RTFM, bevor ich motze. Wäre ja irgendwo auch verwunderlich, wenn bisher noch niemand diese Funktion eingebaut hätte Big Grin

Dwachs

Zitat:Original von Sam
-> der gdb-Output scheint mir da aussagekräftiger zu sein.
ja der reicht schon, diese Routine wird von nur einer anderen aufgerufen etc. Dummerweise siehts so aus, als moechte Simttrans ein Bild zeichnen mit einer negativen Anzahl Pixel. Was generell keine gute Idee ist. Ich kann den Fehler aber nicht nachvollziehen.

Hast du selber kompiliert oder meine Programmdatei genommen?

Du hast das Programm in einem maximierten Fenster laufen? Wie gross ist das? Steht in der Konsole, von der Simutrans ausgestartet wurde.

Wie gross ist deine Karte?

Kommt mit dem Patch derselbe Fehler (in pixcopy)?

Zweiter Versuch:

linux executable gcc 4

patch file

Tritt der Fehler auch auf, wenn ein normales Fenster nicht vollstaendig (oder gar nicht) sichtbar ist? Ich meine ein Fenster, in dem kein kleiner Ausschnitt der Welt zu sehen ist. Also Linienmanager etc aber kein Info-Fenster von Fahrzeugen, Haeusern etc.

Dwachs

@Sam: bitte mal mit einem neuen Nightly testen. Bug sollte in r2350 gefixt sein. Hoffentlich Wink
Seiten: 1 2