diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp index 5c73ae0488db7b1fefeecb3fbdde597461a74bcc..79075d50b68a567489328de085c1fce6b6b5ad8b 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp @@ -411,7 +411,7 @@ RunControl* S60DeviceRunConfigurationRunner::run(QSharedPointer<RunConfiguration // ======== S60DeviceRunControl S60DeviceRunControl::S60DeviceRunControl(QSharedPointer<RunConfiguration> runConfiguration) - : RunControl(runConfiguration) + : RunControl(runConfiguration), m_adapter(0) { m_makesis = new QProcess(this); connect(m_makesis, SIGNAL(readyReadStandardError()), @@ -471,7 +471,7 @@ void S60DeviceRunControl::stop() { m_makesis->kill(); m_signsis->kill(); - //m_adapter->terminate(); + m_adapter->terminate(); } bool S60DeviceRunControl::isRunning() const @@ -533,7 +533,6 @@ void S60DeviceRunControl::signsisProcessFinished() emit finished(); return; } - //TODO m_adapter = new trk::Adapter; connect(m_adapter, SIGNAL(finished()), this, SLOT(runFinished())); //TODO com selection, sisx destination and file path user definable @@ -549,6 +548,8 @@ void S60DeviceRunControl::signsisProcessFinished() void S60DeviceRunControl::runFinished() { + m_adapter->deleteLater(); + m_adapter = 0; emit addToOutputWindow(this, tr("Finished.")); emit finished(); } diff --git a/tests/manual/trk/launcher.cpp b/tests/manual/trk/launcher.cpp index 201dda4dfc1081420d3811971e032a8cf50033dd..7443a4ad17eadc1fe117f8e77b31d2952455662e 100644 --- a/tests/manual/trk/launcher.cpp +++ b/tests/manual/trk/launcher.cpp @@ -40,10 +40,14 @@ BOOL WINAPI TryReadFile(HANDLE hFile, LPOVERLAPPED lpOverlapped) { COMSTAT comStat; - if(!ClearCommError(hFile, NULL, &comStat)){ + if (!ClearCommError(hFile, NULL, &comStat)){ qDebug() << "ClearCommError() failed"; return FALSE; } + if (comStat.cbInQue == 0) { + *lpNumberOfBytesRead = 0; + return FALSE; + } return ReadFile(hFile, lpBuffer, qMin(comStat.cbInQue, nNumberOfBytesToRead), @@ -66,7 +70,6 @@ Adapter::Adapter() #endif m_trkWriteToken = 0; m_trkWriteBusy = false; - startTimer(100); } Adapter::~Adapter() @@ -88,6 +91,7 @@ bool Adapter::startServer() qDebug("Unable to connect to TRK server"); return false; } + m_timerId = startTimer(100); qDebug("Connecting"); sendTrkInitialPing(); sendTrkMessage(TrkConnect); // Connect @@ -197,6 +201,14 @@ void Adapter::waitForTrkFinished(const TrkResult &result) sendTrkMessage(TrkPing, CB(handleWaitForFinished)); } +void Adapter::terminate() +{ + QByteArray ba; + appendShort(&ba, 0x0000, TargetByteOrder); + appendInt(&ba, m_session.pid, TargetByteOrder); + sendTrkMessage(TrkDeleteItem, CB(waitForTrkFinished), ba); +} + void Adapter::sendTrkAck(byte token) { logMessage(QString("SENDING ACKNOWLEDGEMENT FOR TOKEN %1").arg(int(token))); @@ -262,6 +274,9 @@ void Adapter::tryTrkRead() if (isValidTrkResult(m_trkReadQueue)) break; } + if (charsRead == 0 && m_trkReadQueue.isEmpty()) { + return; + } #else // USE_NATIVE if (m_trkDevice->bytesAvailable() == 0 && m_trkReadQueue.isEmpty()) { return; @@ -475,6 +490,7 @@ void Adapter::handleCreateProcess(const TrkResult &result) void Adapter::handleWaitForFinished(const TrkResult &result) { logMessage(" FINISHED: " + stringFromArray(result.data)); + killTimer(m_timerId); emit finished(); } diff --git a/tests/manual/trk/launcher.h b/tests/manual/trk/launcher.h index 656d6514186e620439e36d5bbc913c4c7dea1b5f..09d2fed448617bf7f3333a3b1386d57da83ce751 100644 --- a/tests/manual/trk/launcher.h +++ b/tests/manual/trk/launcher.h @@ -64,6 +64,9 @@ public: signals: void finished(); +public slots: + void terminate(); + private: // // TRK @@ -137,6 +140,7 @@ private: // Debuggee state Session m_session; // global-ish data (process id, target information) + int m_timerId; QString m_fileName; QString m_copySrcFileName; QString m_copyDstFileName;