Hello to all.
It seems that the current crash on Windows when Stellarium is compiled
in Release mode with Qt 4.8.* is caused by some kind of thread safety
issue. Stellarium doesn't crash when it's compiled in Debug mode
because it activates a mutex mechanism normally hidden in an #ifndef.
The mutex ensures that only one copy of StelPainter is active at the
time due to some limitation of OpenGL. The attached patch solves the
crash by enabling the mutex in release mode, but it would be better if
we can find the root reason.
The crash is reproducible when Stellarium is built in "release mode
with debug symbols", which allows debugging (see lines 27 and 299-302
in the main CMakeLists.txt). Stack trace from a crash run:
0 ZN7QObjectD2Ev C:\QtSDK\Desktop\Qt\4.8.1\mingw\bin\QtCore4.dll 0 0x6e1de8e0
1 StelTexture::~StelTexture StelTexture.cpp 148 0xfa6773
2 deref qsharedpointer_impl.h 342 0xfd474c
3 deref qsharedpointer_impl.h 336 0xfd474c
4 ~ExternalRefCount qsharedpointer_impl.h 401 0xfd474c
5 ~QSharedPointer qsharedpointer_impl.h 467 0xfd474c
6 StelLoadingBar::~StelLoadingBar StelLoadingBar.cpp 50 0xfd474c
7 StelApp::init StelApp.cpp 330 0xf83fe8
8 StelAppGraphicsWidget::init StelAppGraphicsWidget.cpp 58 0xf94e9e
9 StelMainGraphicsView::init StelMainGraphicsView.cpp 254 0x108c703
10 StelMainWindow::init StelMainWindow.cpp 107 0x108ede2
11 _fu3___ZN11StelFileMgr13fileLocationsE main.cpp 341 0x403790
It crashes with a segmentation fault in the destructor of
StelLoadingBar/StelTexture. Sometimes the crash occurs only when I'm
running the build with the debugger, depending on what else I'm
running, which is another indicator of a thread safety issue.
Note that in all cases, the splash image is not displayed, even though
things are loading in the background (my disk activity indicator is
Anyway, I really don't have any more time for this now. I will
probably have more time next week. I can probably test proposed
changes to the code in the meantime, and it makes more sense to send
them as patches instead of committing to the repository.