Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Crash at startup due to #8741 #8825

Closed
JGRennison opened this issue Mar 8, 2021 · 1 comment
Closed

Crash at startup due to #8741 #8825

JGRennison opened this issue Mar 8, 2021 · 1 comment

Comments

@JGRennison
Copy link
Contributor

Version of OpenTTD

Since e56d2c6, #8741.
The previous commit to that is fine.

Expected result

No crash, menu screen shown

Actual result

SDL2 on Linux with default blitter and video driver.
(Running with -v sdl works fine).

Crash occurs when NewGRF scan completes, when menu would be shown.

Thread 6 "ottd:game" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffefb6d700 (LWP 170223)]
0x00007ffff42a5f29 in ?? () from /usr/lib/x86_64-linux-gnu/libGLdispatch.so.0
(gdb) bt
#0  0x00007ffff42a5f29 in ?? () from /usr/lib/x86_64-linux-gnu/libGLdispatch.so.0
#1  0x0000555555cc0909 in OpenGLSprite::~OpenGLSprite (this=0x5555596163f8, __in_chrg=<optimised out>) at /home/jgr/misc/openttd-2/src/video/opengl.cpp:1400
#2  0x0000555555cbf68c in OpenGLBackend::ClearCursorCache (this=0x555558822ee0) at /home/jgr/misc/openttd-2/src/video/opengl.cpp:1078
#3  0x0000555555cc952f in VideoDriver_SDL_OpenGL::ClearSystemSprites (this=0x555558416fe0) at /home/jgr/misc/openttd-2/src/video/sdl2_opengl_v.cpp:120
#4  0x0000555555daa065 in GfxLoadSprites () at /home/jgr/misc/openttd-2/src/gfxinit.cpp:342
#5  0x0000555555c5b70b in AfterLoadGame () at /home/jgr/misc/openttd-2/src/saveload/afterload.cpp:763
#6  0x0000555555c96a62 in DoLoad (reader=0x7fffc46c7a10, load_check=false) at /home/jgr/misc/openttd-2/src/saveload/saveload.cpp:2728
#7  0x0000555555c96ebb in SaveOrLoad (filename="opntitle.dat", fop=SLO_LOAD, dft=DFT_GAME_FILE, sb=BASESET_DIR, threaded=true) at /home/jgr/misc/openttd-2/src/saveload/saveload.cpp:2837
#8  0x0000555555ed882c in LoadIntroGame (load_newgrfs=true) at /home/jgr/misc/openttd-2/src/openttd.cpp:346
#9  0x0000555555edab73 in SwitchToMode (new_mode=SM_MENU) at /home/jgr/misc/openttd-2/src/openttd.cpp:1127
#10 0x0000555555edcb7e in GameLoop () at /home/jgr/misc/openttd-2/src/openttd.cpp:1482
#11 0x0000555555ccaaa5 in VideoDriver::GameLoop (this=0x555558416fe0) at /home/jgr/misc/openttd-2/src/video/video_driver.cpp:33
#12 0x0000555555ccab28 in VideoDriver::GameThread (this=0x555558416fe0) at /home/jgr/misc/openttd-2/src/video/video_driver.cpp:40
#13 0x0000555555ccabd0 in VideoDriver::GameThreadThunk (drv=0x555558416fe0) at /home/jgr/misc/openttd-2/src/video/video_driver.cpp:58
#14 0x0000555555ccb5f8 in StartNewThread<void (*)(VideoDriver*), VideoDriver*>(std::thread*, char const*, void (*&&)(VideoDriver*), VideoDriver*&&)::{lambda(char const*, void (*&&)(VideoDriver*), VideoDriver*&&)#1}::operator()(char const*, void (*&&)(VideoDriver*), VideoDriver*&&) const (this=0x555559615f28, name=0x555556337748 "ottd:game", F=@0x555559615f30: 0x555555ccabb4 <VideoDriver::GameThreadThunk(VideoDriver*)>, A#0=@0x555559615f28: 0x555558416fe0)
    at /home/jgr/misc/openttd-2/src/video/../thread.h:56
#15 0x0000555555ccc522 in std::__invoke_impl<void, StartNewThread<void (*)(VideoDriver*), VideoDriver*>(std::thread*, char const*, void (*&&)(VideoDriver*), VideoDriver*&&)::{lambda(char const*, void (*&&)(VideoDriver*), VideoDriver*&&)#1}, char const*, void (*)(VideoDriver*), VideoDriver*>(std::__invoke_other, StartNewThread<void (*)(VideoDriver*), VideoDriver*>(std::thread*, char const*, void (*&&)(VideoDriver*), VideoDriver*&&)::{lambda(char const*, void (*&&&&)(VideoDriver*), VideoDriver*&&)#1}, char const*&&, void (*&&)(VideoDriver*), VideoDriver*&&) (__f=...) at /usr/include/c++/9/bits/invoke.h:60
#16 0x0000555555ccc3fa in std::__invoke<StartNewThread<void (*)(VideoDriver*), VideoDriver*>(std::thread*, char const*, void (*&&)(VideoDriver*), VideoDriver*&&)::{lambda(char const*, void (*&&)(VideoDriver*), VideoDriver*&&)#1}, char const*, void (*)(VideoDriver*), VideoDriver*> (__fn=...) at /usr/include/c++/9/bits/invoke.h:95
#17 0x0000555555ccc2d9 in std::thread::_Invoker<std::tuple<StartNewThread<void (*)(VideoDriver*), VideoDriver*>(std::thread*, char const*, void (*&&)(VideoDriver*), VideoDriver*&&)::{lambda(char const*, void (*&&)(VideoDriver*), VideoDriver*&&)#1}, char const*, void (*)(VideoDriver*), VideoDriver*> >::_M_invoke<0ul, 1ul, 2ul, 3ul>(std::_Index_tuple<0ul, 1ul, 2ul, 3ul>) (this=0x555559615f28) at /usr/include/c++/9/thread:244
#18 0x0000555555ccc258 in std::thread::_Invoker<std::tuple<StartNewThread<void (*)(VideoDriver*), VideoDriver*>(std::thread*, char const*, void (*&&)(VideoDriver*), VideoDriver*&&)::{lambda(char const*, void (*&&)(VideoDriver*), VideoDriver*&&)#1}, char const*, void (*)(VideoDriver*), VideoDriver*> >::operator()() (this=0x555559615f28) at /usr/include/c++/9/thread:251
#19 0x0000555555ccc238 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<StartNewThread<void (*)(VideoDriver*), VideoDriver*>(std::thread*, char const*, void (*&&)(VideoDriver*), VideoDriver*&&)::{lambda(char const*, void (*&&)(VideoDriver*), VideoDriver*&&)#1}, char const*, void (*)(VideoDriver*), VideoDriver*> > >::_M_run() (this=0x555559615f20) at /usr/include/c++/9/thread:195
#20 0x00007ffff7687d84 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#21 0x00007ffff779b609 in start_thread (arg=<optimised out>) at pthread_create.c:477
#22 0x00007ffff7375293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Steps to reproduce

Run e56d2c6 or later.

@TrueBrain
Copy link
Member

TrueBrain commented Mar 8, 2021

ClearSystemSprites is called from the game-thread, but it really only should be called from the draw-thread.

This means we need to delay that function too till the draw-thread. This is not a problem (other than it needs doing), as it is also populated no earlier than the next draw-tick.

michicc added a commit to michicc/OpenTTD that referenced this issue Mar 8, 2021
@michicc michicc closed this as completed in 436cdf1 Mar 8, 2021
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

No branches or pull requests

2 participants