News:

Simutrans Sites
Know our official sites. Find tools and resources for Simutrans.

Crash when trying to update connected components for deleted halt

Started by ceeac, December 08, 2024, 01:52:03 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

ceeac

Crash occurred when deleting lots of stops on a large map.
The obvious fix would be to protect the access to c.halt in haltestelle_t::fill_connected_component by an if condition but I am not sure whether this only treats the symptoms and not the cause.

To reproduce, load
https://files.simutrans-germany.com/upload/11453-routing-bug.sve,
then try to delete some above-ground stops as "MMol Trans" near Albion.

/home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354:35: runtime error: member call on null pointer of type 'struct haltestelle_t'
/home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1347:6: runtime error: member access within null pointer of type 'struct haltestelle_t'
AddressSanitizer:DEADLYSIGNAL
=================================================================
==21785==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000388 (pc 0x6055bbb8c3d2 bp 0x000000000388 sp 0x7ffd5db18a60 T0)
==21785==The signal is caused by a READ memory access.
==21785==Hint: address points to the zero page.
    #0 0x6055bbb8c3d2 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1347
    #1 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #2 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #3 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #4 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #5 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #6 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #7 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #8 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #9 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #10 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #11 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #12 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #13 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #14 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #15 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #16 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #17 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #18 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #19 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #20 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #21 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #22 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #23 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #24 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #25 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #26 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #27 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #28 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #29 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #30 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #31 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #32 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #33 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #34 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #35 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #36 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #37 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #38 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #39 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #40 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #41 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #42 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #43 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #44 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #45 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #46 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #47 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #48 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #49 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #50 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #51 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #52 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #53 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #54 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #55 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #56 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #57 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #58 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #59 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #60 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #61 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #62 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #63 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #64 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #65 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #66 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #67 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #68 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #69 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #70 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #71 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #72 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #73 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #74 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #75 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #76 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #77 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #78 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #79 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #80 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #81 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #82 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #83 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #84 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #85 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #86 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #87 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #88 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #89 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #90 0x6055bbb8c6c4 in haltestelle_t::fill_connected_component(unsigned char, unsigned short) /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1354
    #91 0x6055bbb8cf46 in haltestelle_t::rebuild_connected_components() /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1367
    #92 0x6055bbc075ed in haltestelle_t::step_all() /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:144
    #93 0x6055bc2513ee in karte_t::step() /home/ceeac/code/simutrans/src/simutrans/world/simworld.cc:3292
    #94 0x6055bc25956b in karte_t::interactive(unsigned int) /home/ceeac/code/simutrans/src/simutrans/world/simworld.cc:6307
    #95 0x6055bbc5d469 in simu_main(int, char**) /home/ceeac/code/simutrans/src/simutrans/simmain.cc:1693
    #96 0x6055bbc976aa in sysmain(int, char**) /home/ceeac/code/simutrans/src/simutrans/sys/simsys.cc:1470
    #97 0x7530a4434e07  (/usr/lib/libc.so.6+0x25e07) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    #98 0x7530a4434ecb in __libc_start_main (/usr/lib/libc.so.6+0x25ecb) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    #99 0x6055ba11dfe4 in _start (/home/ceeac/code/simutrans/build/default/simutrans/simutrans+0x4360fe4) (BuildId: 8c555c7bd93132cf5f8559540671f269ae9b9250)

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV /home/ceeac/code/simutrans/src/simutrans/simhalt.cc:1347 in haltestelle_t::fill_connected_component(unsigned char, unsigned short)
==21785==ABORTING

prissi

Cannot reproduce this. I have deleted half of the stops and all is fine. Maybe my computer is too fast/slow.

But in principle, you are right. If a stop in the list earlier is deleted, then the halthandle could be invalid. So checking in the loop with a if(c.halt.is_bound()) makes sense.