[Kde-games-devel] Review Request 109285: Fix crash in Killbots shutdown sequence

Albert Astals Cid aacid at kde.org
Mon Mar 4 22:53:04 UTC 2013


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://git.reviewboard.kde.org/r/109285/
-----------------------------------------------------------

Review request for KDE Games and Parker Coates.


Description
-------

As we can see in build.kde.org the test crashes sometimes http://build.kde.org/view/kdegames/job/killbots_master/20/testReport/%28root%29/TestSuite/enginetest/

I managed to reproduce it locally and the backtrace is

#0  ref (this=0x0) at ../../include/QtCore/../../src/corelib/arch/qatomic_x86_64.h:121
#1  QPen::QPen (this=0x7f77540d46d0) at painting/qpen.cpp:280
#2  0x00007f77649022a3 in QSvgStrokeStyle::QSvgStrokeStyle (this=0x7f77540d46c0) at qsvgstyle.cpp:291
#3  0x00007f77648f2d85 in parsePen (handler=0x7f775b961960, attributes=..., node=0x7f77540d39b0) at qsvghandler.cpp:1172
#4  parseStyle (handler=0x7f775b961960, attributes=..., node=0x7f77540d39b0) at qsvghandler.cpp:2216
#5  parseStyle (node=node at entry=0x7f77540d39b0, attrs=..., handler=handler at entry=0x7f775b961960) at qsvghandler.cpp:2257
#6  0x00007f77648f73b4 in QSvgHandler::startElement (this=this at entry=0x7f775b961960, localName=..., attributes=...) at qsvghandler.cpp:3673
#7  0x00007f77648f9960 in QSvgHandler::parse (this=this at entry=0x7f775b961960) at qsvghandler.cpp:3559
#8  0x00007f77648f9bfd in QSvgHandler::init (this=this at entry=0x7f775b961960) at qsvghandler.cpp:3539
#9  0x00007f77648f9e06 in QSvgHandler::QSvgHandler (this=0x7f775b961960, data=...) at qsvghandler.cpp:3522
#10 0x00007f7764905dad in QSvgTinyDocument::load (contents=...) at qsvgtinydocument.cpp:208
#11 0x00007f7764905ec8 in QSvgTinyDocument::load (fileName=...) at qsvgtinydocument.cpp:182
#12 0x00007f7764908db7 in loadDocument<QString> (in=..., d=0x7f7754005350, q=0x7f7754005330) at qsvgrenderer.cpp:317
#13 QSvgRenderer::load (this=this at entry=0x7f7754005330, filename=...) at qsvgrenderer.cpp:343
#14 0x00007f7764908f3d in QSvgRenderer::QSvgRenderer (this=0x7f7754005330, filename=..., parent=0x0) at qsvgrenderer.cpp:140
#15 0x00007f7768d2bfc8 in KGRInternal::RendererPool::allocRenderer (this=0x1b327c0) at /home/kdeunstable/libkdegames/kgamerenderer.cpp:641
#16 0x00007f7768d2ac3c in KGRInternal::Worker::run (this=0x1ba7360) at /home/kdeunstable/libkdegames/kgamerenderer.cpp:564
#17 0x00007f77680fb45d in QThreadPoolThread::run (this=0x1ba7390) at concurrent/qthreadpool.cpp:107
#18 0x00007f7768107aec in QThreadPrivate::start (arg=0x1ba7390) at thread/qthread_unix.cpp:338
#19 0x00007f776680ae9a in start_thread (arg=0x7f775b962700) at pthread_create.c:308
#20 0x00007f7766b13cbd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112
#21 0x0000000000000000 in ?? ()

The problem is caused because our KGameRenderer is a K_GLOBAL_STATIC that uses a pen that is a Q_GLOBAL_STATIC and depending on the destruction order it may happen that the QPen is destroyed first and then bad stuff happens.

I've workarounded the issue by making the KGameRenderer not be a K_GLOBAL_STATIC anymore and adding a specific cleanup() call


Diffs
-----

  mainwindow.cpp cda3117 
  renderer.h a1bdae3 
  renderer.cpp f128c9c 
  tests/enginetest.h 5102ea3 
  tests/enginetest.cpp b0c5ea4 

Diff: http://git.reviewboard.kde.org/r/109285/diff/


Testing
-------

Ran
  while [ true ]; do ./tests/enginetest; if [ $? -ne 0 ]; then break; fi done 
for a long time with no crashes


Thanks,

Albert Astals Cid

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kde-games-devel/attachments/20130304/f2f4fd4a/attachment.html>


More information about the kde-games-devel mailing list