https://bugs.kde.org/show_bug.cgi?id=377489
Bug ID: 377489
Summary: crash in DVcsJob::slotProcessError after QProcess was
deleted?!
Product: kdevplatform
Version: git master
Platform: Compiled Sources
OS: OS X
Status: UNCONFIRMED
Severity: crash
Priority: NOR
Component: dvcs
Assignee: [email protected]
Reporter: [email protected]
Target Milestone: ---
I have been trying to pinpoint the reason for DvcsJob failures to start git
commands on Linux and thus have the following local patches to dvcsjob.c:
```
@@ -193,6 +205,16 @@ void DVcsJob::start()
d->childproc->start();
d->model->appendLine(directory().path() + "> " + commandDisplay);
+
+ if (!d->childproc->waitForStarted(100)) {
+ QString error = i18n("DVCSJob::start: %1 failed to start: %2",
commandDisplay, d->childproc->errorString());
+ d->model->appendLine(error);
+ setError( 255 );
+ setErrorText(error);
+ d->status = JobFailed;
+ emitResult();
+ qCWarning(VCS) << error;
+ }
}
void DVcsJob::setCommunicationMode(KProcess::OutputChannelMode comm)
@@ -212,9 +234,11 @@ void DVcsJob::slotProcessError( QProcess::ProcessError err
)
setError(OutputJob::FailedShownError); //we don't want to trigger a
message box
d->errorOutput = d->childproc->readAllStandardError();
+ QByteArray stdOut = d->childproc->readAllStandardOutput();
QString displayCommand = KShell::joinArgs(dvcsCommand());
- QString completeErrorText = i18n("Process '%1' exited with status %2\n%3",
displayCommand, d->childproc->exitCode(),
QString::fromLocal8Bit(d->errorOutput) );
+ QString completeErrorText = i18n("Process '%1' exited with status
%2\n\"%3\"\n\"%4\"",
+ displayCommand, d->childproc->exitCode(),
QString::fromLocal8Bit(stdOut), QString::fromLocal8Bit(d->errorOutput) );
setErrorText( completeErrorText );
QString errorValue;
@@ -241,11 +265,11 @@ void DVcsJob::slotProcessError( QProcess::ProcessError
err )
errorValue = QStringLiteral("UnknownError");
break;
}
- qCDebug(VCS) << "Found an error while running" << displayCommand << ":" <<
errorValue
+ qCWarning(VCS) << "Found an error while running" << displayCommand << ":"
<< errorValue
<< "Exit code is:" <<
d->childproc->exitCode();
- qCDebug(VCS) << "Error:" << completeErrorText;
- displayOutput(QString::fromLocal8Bit(d->errorOutput));
- d->model->appendLine(i18n("Command finished with error %1.", errorValue));
+ qCWarning(VCS) << "Error:" << completeErrorText;
+// displayOutput(QString::fromLocal8Bit(d->errorOutput));
+ d->model->appendLine(i18n("%1 (%2).", completeErrorText, errorValue));
if(verbosity()==Silent) {
setVerbosity(Verbose);
```
Just now I got a weird crash on *Mac* after DvcsJob::start() failed because of
a timeout (the machine was swamped with disk I/O), with this printed on the
terminal:
```
kdevplatform.vcs: "DVCSJob::start: git stash list failed to start: Process
operation timed out"
QProcess: Destroyed while process ("git") is still running.
KCrash: Application 'kdevelop' crashing...
KCrash: Attempting to start /opt/local/libexec/kde5/drkonqi directly
```
I didn't keep the backtrace because initially I wrote this off to overall
instability (a "gremlin"), but then I realised that the crash occurred because
DVcsJob::dvcsCommand() was called from DvcsJob::slotProcessError() *AFTER* the
underlying QProcess had been deleted.
AFAIK that should never happen even in situations like I was seeing; could this
point to a design bug in DVcsJob (or worse, KProcess)?
--
You are receiving this mail because:
You are watching all bug changes.