Skip to content
  • Igor Kushnir's avatar
    Kill CTestFindJob when its project is destroyed · 103ab0be
    Igor Kushnir authored
    When a user closes a project while its associated CTestFindJob is still
    working, the job is not notified and keeps running. After that, when
    BackgroundParser eventually parses all documents requested by the job,
    the job calls TestController::addTestSuite(). Inside this call the
    CTestSuite::project() pointer is dereferenced in
    TestView::addTestSuite() => TestView::itemForProject(), which causes a
    segmentation fault.
    
    Ideally all associated CTestFindJob-s should be killed just before or
    just after a project is closed to revert their no longer useful requests
    to BackgroundParser as soon as possible. However, reliably detecting
    that the project is no longer open is not straightforward, especially if
    the project opening is aborted or the project is closed even before a
    CTestFindJob is created. My implementation of such a proper fix is
    intertwined with several other CTest-, TestController- and
    TestView-related fixes. The combined fix will be so large that it won't
    fit into the 5.6 branch. So this commit implements a simple temporary
    workaround for the fairly easy to trigger crash: check if the project is
    destroyed in CTestFindJob::updateReady() and kill the job if this is the
    case.
    
    BUG: 329246
    FIXED-IN: 5.6.1
    103ab0be