← Back to team overview

touch-packages team mailing list archive

[Bug 1373039] Re: Crash in QML compiler if terminated whilst compiling asynchronous components

 

** Branch linked: lp:ubuntu/vivid-proposed/camera-app

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to camera-app in Ubuntu.
https://bugs.launchpad.net/bugs/1373039

Title:
  Crash in QML compiler if terminated whilst compiling asynchronous
  components

Status in camera-app package in Ubuntu:
  New
Status in qtdeclarative-opensource-src package in Ubuntu:
  Confirmed

Bug description:
  Reproducible on mako and krillin using devel-proposed r248 or rtm r50

  This is easiest to reproduce with the camera-app, as this has a number
  of large components that get loaded asynchronously on start-up,
  however I believe it should be possible to trigger in any app that
  contains asynchronous Loaders.

  Steps to reproduce

  1. Start camera-app

  2. Whilst loading, swipe to the app switcher.

  3. Close camera-app.

  Expected result

  App closes cleanly

  Actual result

  Sometimes the app segfaults whilst closing

  It may take multiple attempts to cause a crash, as the SIGTERM signal
  has to be received at a certain point during the compilation process
  for the crash to occur.

  
  Back trace of an example crash:

  "There are still "1" items in the process of being created at engine destruction."
  [Thread 0xac267450 (LWP 5576) exited]

  Program received signal SIGSEGV, Segmentation fault.
  [Switching to Thread 0xb1a3e450 (LWP 5561)]
  0xb6618dd6 in createNode (left=false, parent=0x0, v=@0x31: <error reading variable>, k=@0x2d: <error reading variable>, this=0xae598538)
      at /usr/include/arm-linux-gnueabihf/qt5/QtCore/qmap.h:216
  216                 new (&n->key) Key(k);
  (gdb) bt
  #0  0xb6618dd6 in createNode (left=false, parent=0x0, v=@0x31: <error reading variable>, k=@0x2d: <error reading variable>, this=0xae598538)
      at /usr/include/arm-linux-gnueabihf/qt5/QtCore/qmap.h:216
  #1  QMapNode<unsigned int, QV4::ExecutableAllocator::ChunkOfPages*>::copy (this=0x21, d=d@entry=0xae598538)
      at /usr/include/arm-linux-gnueabihf/qt5/QtCore/qmap.h:246
  #2  0xb6618e02 in QMapNode<unsigned int, QV4::ExecutableAllocator::ChunkOfPages*>::copy (this=0xb11a5c28, d=d@entry=0xae598538)
      at /usr/include/arm-linux-gnueabihf/qt5/QtCore/qmap.h:249
  #3  0xb6618e02 in QMapNode<unsigned int, QV4::ExecutableAllocator::ChunkOfPages*>::copy (this=0xae54a2f8, d=d@entry=0xae598538)
      at /usr/include/arm-linux-gnueabihf/qt5/QtCore/qmap.h:249
  #4  0xb6618e4e in QMap<unsigned int, QV4::ExecutableAllocator::ChunkOfPages*>::detach_helper (this=0x6ae34)
      at /usr/include/arm-linux-gnueabihf/qt5/QtCore/qmap.h:969
  #5  0xb6618950 in detach (this=0x6ae34) at /usr/include/arm-linux-gnueabihf/qt5/QtCore/qmap.h:378
  #6  insert (avalue=<synthetic pointer>, akey=<optimized out>, this=0x6ae34) at /usr/include/arm-linux-gnueabihf/qt5/QtCore/qmap.h:676
  #7  QV4::ExecutableAllocator::allocate (this=0x6ae30, size=592, size@entry=578) at jsruntime/qv4executableallocator.cpp:179
  #8  0xb65bc900 in ExecutableMemoryHandle (size=578, allocator=<optimized out>, this=0xae5af100) at ../3rdparty/masm/stubs/ExecutableAllocator.h:66
  #9  allocate (size=578, this=0xb1a3cfbc) at ../3rdparty/masm/stubs/ExecutableAllocator.h:97
  #10 JSC::LinkBuffer::linkCode (this=this@entry=0xb1a3d068, ownerUID=ownerUID@entry=0x0, effort=effort@entry=JSC::JITCompilationMustSucceed)
      at ../3rdparty/masm/assembler/LinkBuffer.cpp:79
  #11 0xb65b18de in LinkBuffer (effort=JSC::JITCompilationMustSucceed, ownerUID=0x0, masm=0xae5a9aa0, globalData=..., this=0xb1a3d068)
      at ../3rdparty/masm/assembler/LinkBuffer.h:92
  #12 QV4::JIT::Assembler::link (this=0xae5a9aa0, codeSize=codeSize@entry=0xb1a3d0e8) at jit/qv4isel_masm.cpp:141
  #13 0xb65b2918 in QV4::JIT::InstructionSelection::run (this=<optimized out>, functionIndex=<optimized out>) at jit/qv4isel_masm.cpp:360
  #14 0xb65658f0 in QV4::EvalInstructionSelection::compile (this=this@entry=0xae564070, generateUnitData=generateUnitData@entry=false)
      at compiler/qv4isel_p.cpp:85
  #15 0xb6617608 in QV4::Script::precompile (module=module@entry=0xb1a3d460, unitGenerator=unitGenerator@entry=0xb1a3d49c, engine=engine@entry=0x6b290,
      url=..., source=..., reportedErrors=reportedErrors@entry=0xb1a3d414) at jsruntime/qv4script.cpp:397
  #16 0xb666b5ac in QQmlScriptBlob::dataReceived (this=0xae5a8a18, data=...) at qml/qqmltypeloader.cpp:2698
  #17 0xb66650ac in QQmlDataLoader::setData (this=this@entry=0x6ac44, blob=blob@entry=0xae5a8a18, d=...) at qml/qqmltypeloader.cpp:1198
  #18 0xb6665292 in QQmlDataLoader::setData (this=this@entry=0x6ac44, blob=blob@entry=0xae5a8a18, file=file@entry=0xb1a3d558)
      at qml/qqmltypeloader.cpp:1190
  #19 0xb66679f8 in QQmlDataLoader::loadThread (this=this@entry=0x6ac44, blob=blob@entry=0xae5a8a18) at qml/qqmltypeloader.cpp:1068
  #20 0xb6667dd2 in QQmlDataLoader::load (this=0x6ac44, blob=0xae5a8a18, mode=QQmlDataLoader::PreferSynchronous) at qml/qqmltypeloader.cpp:932
  #21 0xb6667fc2 in QQmlTypeLoader::getScript (this=0x6ac44, url=...) at qml/qqmltypeloader.cpp:1649
  #22 0xb666a818 in QQmlTypeLoader::Blob::addImport (this=this@entry=0xb11033f0, import=import@entry=0xae58a7c0, errors=errors@entry=0xb1a3d67c)
      at qml/qqmltypeloader.cpp:1312
  #23 0xb666aaa8 in QQmlTypeData::continueLoadFromIR (this=this@entry=0xb11033f0) at qml/qqmltypeloader.cpp:2267
  #24 0xb666afda in QQmlTypeData::dataReceived (this=0xb11033f0, data=...) at qml/qqmltypeloader.cpp:2224
  #25 0xb66650ac in QQmlDataLoader::setData (this=this@entry=0x6ac44, blob=blob@entry=0xb11033f0, d=...) at qml/qqmltypeloader.cpp:1198
  #26 0xb6665292 in QQmlDataLoader::setData (this=this@entry=0x6ac44, blob=blob@entry=0xb11033f0, file=file@entry=0xb1a3d7a0)
      at qml/qqmltypeloader.cpp:1190
  #27 0xb66679f8 in QQmlDataLoader::loadThread (this=this@entry=0x6ac44, blob=blob@entry=0xb11033f0) at qml/qqmltypeloader.cpp:1068
  #28 0xb6667dd2 in QQmlDataLoader::load (this=0x6ac44, blob=0xb11033f0, mode=QQmlDataLoader::PreferSynchronous) at qml/qqmltypeloader.cpp:932
  #29 0xb6667eaa in QQmlTypeLoader::getType (this=this@entry=0x6ac44, url=..., mode=mode@entry=QQmlDataLoader::PreferSynchronous)
      at qml/qqmltypeloader.cpp:1606
  #30 0xb666912c in QQmlTypeData::resolveTypes (this=0xae549db8) at qml/qqmltypeloader.cpp:2452
  #31 0xb6669710 in QQmlTypeData::allDependenciesDone (this=0xae549db8) at qml/qqmltypeloader.cpp:2312
  #32 0xb666510e in QQmlDataLoader::setData (this=this@entry=0x6ac44, blob=blob@entry=0xae549db8, d=...) at qml/qqmltypeloader.cpp:1201
  #33 0xb6665292 in QQmlDataLoader::setData (this=this@entry=0x6ac44, blob=blob@entry=0xae549db8, file=file@entry=0xb1a3d9b8)
      at qml/qqmltypeloader.cpp:1190
  #34 0xb66679f8 in QQmlDataLoader::loadThread (this=this@entry=0x6ac44, blob=blob@entry=0xae549db8) at qml/qqmltypeloader.cpp:1068
  #35 0xb6667dd2 in QQmlDataLoader::load (this=0x6ac44, blob=0xae549db8, mode=QQmlDataLoader::PreferSynchronous) at qml/qqmltypeloader.cpp:932
  #36 0xb6667eaa in QQmlTypeLoader::getType (this=this@entry=0x6ac44, url=..., mode=mode@entry=QQmlDataLoader::PreferSynchronous)
      at qml/qqmltypeloader.cpp:1606
  #37 0xb666912c in QQmlTypeData::resolveTypes (this=0x18ee08) at qml/qqmltypeloader.cpp:2452
  #38 0xb6669710 in QQmlTypeData::allDependenciesDone (this=0x18ee08) at qml/qqmltypeloader.cpp:2312
  #39 0xb666510e in QQmlDataLoader::setData (this=this@entry=0x6ac44, blob=blob@entry=0x18ee08, d=...) at qml/qqmltypeloader.cpp:1201
  #40 0xb6665292 in QQmlDataLoader::setData (this=this@entry=0x6ac44, blob=blob@entry=0x18ee08, file=file@entry=0xb1a3dbd0)
      at qml/qqmltypeloader.cpp:1190
  #41 0xb66679f8 in QQmlDataLoader::loadThread (this=0x6ac44, blob=blob@entry=0x18ee08) at qml/qqmltypeloader.cpp:1068
  #42 0xb6667d32 in QQmlDataLoaderThread::loadThread (this=<optimized out>, b=0x18ee08) at qml/qqmltypeloader.cpp:816
  #43 0xb66a2320 in QQmlThreadPrivate::threadEvent (this=0x6ad08) at qml/ftw/qqmlthread.cpp:198
  #44 0xb66a26e8 in QQmlThreadPrivate::event (this=0x6ad08, e=<optimized out>) at qml/ftw/qqmlthread.cpp:136
  #45 0xb6e11f92 in QCoreApplication::notify(QObject*, QEvent*) () from /usr/lib/arm-linux-gnueabihf/libQt5Core.so.5
  #46 0xb6e11d88 in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib/arm-linux-gnueabihf/libQt5Core.so.5
  #47 0xb6e138ae in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () from /usr/lib/arm-linux-gnueabihf/libQt5Core.so.5
  #48 0xb6e4bea8 in ?? () from /usr/lib/arm-linux-gnueabihf/libQt5Core.so.5
  #49 0xb5facf58 in g_main_context_dispatch () from /lib/arm-linux-gnueabihf/libglib-2.0.so.0
  #50 0xb5fad104 in ?? () from /lib/arm-linux-gnueabihf/libglib-2.0.so.0
  Backtrace stopped: previous frame identical to this frame (corrupt stack?)

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/camera-app/+bug/1373039/+subscriptions


References