about killing "unkillable" jobs

René J.V. Bertin rjvbertin at gmail.com
Tue Nov 24 19:47:10 UTC 2015


On Tuesday November 24 2015 15:10:53 Milian Wolff wrote:

> These things are afaik unrelated. The unkillable jobs in 4.x are afaik the 
> CMake manager stuff which got rewritten for 5.x. There, I don't see the 
> message about unkillable jobs anymore.

Good!

> Regarding QProcess being destroyed while running: That is clearly a bug. 
> Please find out where it comes from.

At the moment I cannot do much better than this, not very helpful, probably:

  * frame #0: 0x0000000102d39cf0 QtCore`QProcess::~QProcess()
    frame #1: 0x0000000118ede0e6 libkdevcompilerprovider.dylib`GccLikeCompiler::includes() const + 2278
    frame #2: 0x0000000118ed8ffc libkdevcompilerprovider.dylib`CompilerProvider::addPoject(KDevelop::IProject*, QSharedPointer<ICompiler> const&) + 76
    frame #3: 0x0000000118ed8426 libkdevcompilerprovider.dylib`CompilerProvider::CompilerProvider(SettingsManager*, QObject*) + 1798
    frame #4: 0x0000000118edf5a7 libkdevcompilerprovider.dylib`SettingsManager::SettingsManager(bool) + 23
    frame #5: 0x0000000118ec5e89 kdevdefinesandincludesmanager.so`QObject* KPluginFactory::createInstance<DefinesAndIncludesManager, QObject>(QWidget*, QObject*, QList<QVariant> const&) + 393
    frame #6: 0x0000000101b1b5e4 libkdecore.5.dylib`KPluginFactory::create(char const*, QWidget*, QObject*, QList<QVariant> const&, QString const&) + 1124
    frame #7: 0x0000000100072367 libkdevplatformshell.8.dylib`KDevelop::PluginController::loadPluginInternal(QString const&) + 2743
    frame #8: 0x00000001000747b6 libkdevplatformshell.8.dylib`KDevelop::PluginController::initialize() + 2070
    frame #9: 0x000000010007f5b7 libkdevplatformshell.8.dylib`KDevelop::CorePrivate::initialize(KDevelop::Core::Setup, QString) + 4807
    frame #10: 0x0000000100080fad libkdevplatformshell.8.dylib`KDevelop::Core::initialize(KSplashScreen*, KDevelop::Core::Setup, QString const&) + 205
    frame #11: 0x00000001000151d0 kdevelop`main + 47648

and

  * frame #0: 0x0000000102d39cf0 QtCore`QProcess::~QProcess()
    frame #1: 0x0000000118edd3a6 libkdevcompilerprovider.dylib`GccLikeCompiler::defines() const + 1462
    frame #2: 0x0000000118ed90c9 libkdevcompilerprovider.dylib`CompilerProvider::addPoject(KDevelop::IProject*, QSharedPointer<ICompiler> const&) + 281
    frame #3: 0x0000000118ed8426 libkdevcompilerprovider.dylib`CompilerProvider::CompilerProvider(SettingsManager*, QObject*) + 1798
    frame #4: 0x0000000118edf5a7 libkdevcompilerprovider.dylib`SettingsManager::SettingsManager(bool) + 23
    frame #5: 0x0000000118ec5e89 kdevdefinesandincludesmanager.so`QObject* KPluginFactory::createInstance<DefinesAndIncludesManager, QObject>(QWidget*, QObject*, QList<QVariant> const&) + 393
    frame #6: 0x0000000101b1b5e4 libkdecore.5.dylib`KPluginFactory::create(char const*, QWidget*, QObject*, QList<QVariant> const&, QString const&) + 1124
    frame #7: 0x0000000100072367 libkdevplatformshell.8.dylib`KDevelop::PluginController::loadPluginInternal(QString const&) + 2743
    frame #8: 0x00000001000747b6 libkdevplatformshell.8.dylib`KDevelop::PluginController::initialize() + 2070
    frame #9: 0x000000010007f5b7 libkdevplatformshell.8.dylib`KDevelop::CorePrivate::initialize(KDevelop::Core::Setup, QString) + 4807
    frame #10: 0x0000000100080fad libkdevplatformshell.8.dylib`KDevelop::Core::initialize(KSplashScreen*, KDevelop::Core::Setup, QString const&) + 205
    frame #11: 0x00000001000151d0 kdevelop`main + 47648


I get both backtraces twice, but that's maybe related that `b QProcess::~QProcess` sets a breakpoint in 3 locations.

> Without even knowing what process we are talking about, it is unclear whether 
> an eventloop-roundtrip is a safe way to delay the deletion. I severely doubt 

I agree it gives no guarantee that the process has had enough time to finish. But in a way I'd hope that Qt had extended the deleteLater() mechanism to include a retain/release mechanism, or another mechanism by which a class could indicate whether it is safe to call delete on an instance.

> that. Also, probably the process is created on the stack. Again, find out what 

I suppose you mean the QProcess? :)

R.


More information about the KDevelop-devel mailing list