File labtool_dfu-util_wait.patch of Package labtool

From cb0ec95b3687434e1531cfc6818d75a922d041fe Mon Sep 17 00:00:00 2001
From: Scott Tsai <scottt.tw@gmail.com>
Date: Sun, 14 Sep 2014 06:06:26 +0800
Subject: [PATCH 3/3] LabToolDeviceCommThread: call WaitForStarted() in
 runDFU()

From the QProcess state machine design it's more correct to call ::WaitForStarted() and not call ::WaitForFinished() if the former fails.
This patch also make "DFUProcess" a local variable instead of a pointer to heap allocate object to make forgoetting to call delete on error paths impossible.
---
 app/device/labtool/labtooldevicecommthread.cpp | 29 +++++++++++++++-----------
 1 file changed, 17 insertions(+), 12 deletions(-)

diff --git a/app/device/labtool/labtooldevicecommthread.cpp b/app/device/labtool/labtooldevicecommthread.cpp
index 0f0eca8..3ae7952 100644
--- a/app/device/labtool/labtooldevicecommthread.cpp
+++ b/app/device/labtool/labtooldevicecommthread.cpp
@@ -235,40 +235,45 @@ void LabToolDeviceCommThread::runDFU()
 
     QStringList arguments;
     arguments << "-R" << "-d 1fc9:000c" << "-D" << mPreparedImage;
-    //mDFUProcess->setWorkingDirectory("../tools/dfu-util-0.7-binaries/win32-mingw32/");
 
-    QProcess* m_DFUProcess = new QProcess();
-    m_DFUProcess->start(program, arguments);
-    if (m_DFUProcess->waitForFinished())
+    QProcess DFUProcess;
+    // DFUProcess.setWorkingDirectory("../tools/dfu-util-0.7-binaries/win32-mingw32/");
+    DFUProcess.start(program, arguments);
+    if (!DFUProcess.waitForStarted())
+    {
+        qDebug() << "DFU program \"" << program << "\" failed to start";
+        return;
+    }
+
+    if (DFUProcess.waitForFinished())
     {
 //        qDebug("DFU program finished");
 
-//        switch(m_DFUProcess->exitStatus()) {
+//        switch(DFUProcess.exitStatus()) {
 //        case QProcess::NormalExit: qDebug("exitStatus() = QProcess::NormalExit"); break;
 //        case QProcess::CrashExit:  qDebug("exitStatus() = QProcess::CrashExit"); break;
-//        default:                   qDebug("exitStatus() = unknown code %d", m_DFUProcess->exitStatus()); break;
+//        default:                   qDebug("exitStatus() = unknown code %d", DFUProcess.exitStatus()); break;
 //        }
 
-//        switch(m_DFUProcess->error()) {
+//        switch(DFUProcess.error()) {
 //        case QProcess::FailedToStart: qDebug("error() = QProcess::FailedToStart"); break;
 //        case QProcess::Crashed:       qDebug("error() = QProcess::Crashed"); break;
 //        case QProcess::Timedout:      qDebug("error() = QProcess::Timedout"); break;
 //        case QProcess::WriteError:    qDebug("error() = QProcess::WriteError"); break;
 //        case QProcess::ReadError:     qDebug("error() = QProcess::ReadError"); break;
 //        case QProcess::UnknownError:  qDebug("error() = QProcess::UnknownError"); break;
-//        default:                      qDebug("error() = unknown code %d", m_DFUProcess->error()); break;
+//        default:                      qDebug("error() = unknown code %d", DFUProcess.error()); break;
 //        }
 
-//        qDebug("exitCode() = %d", m_DFUProcess->exitCode());
+//        qDebug("exitCode() = %d", DFUProcess.exitCode());
 
-//        qDebug("readAllStandardError(): -->%s<--", m_DFUProcess->readAllStandardError().constData());
-//        qDebug("readAllStandardOutput(): -->%s<--", m_DFUProcess->readAllStandardOutput().constData());
+//        qDebug("readAllStandardError(): -->%s<--", DFUProcess.readAllStandardError().constData());
+//        qDebug("readAllStandardOutput(): -->%s<--", DFUProcess.readAllStandardOutput().constData());
     }
     else
     {
         qDebug("DFU program timed out waiting to finish");
     }
-    delete m_DFUProcess;
 }
 
 /*!
-- 
2.1.4

openSUSE Build Service is sponsored by