Symbian: Quick fix for TRK's lock problem

This commit is contained in:
Pawel Polanski
2011-02-08 14:22:17 +01:00
parent 745b143136
commit 2a7f8c1f1a
3 changed files with 21 additions and 17 deletions
@@ -338,7 +338,7 @@ void CodaRunControl::finishRunControl()
QMessageBox *CodaRunControl::createCodaWaitingMessageBox(QWidget *parent)
{
const QString title = tr("Waiting for CODA");
const QString text = tr("Qt Creator is waiting for the CODA application to connect. "
const QString text = tr("Qt Creator is waiting for the CODA application to connect.<br>"
"Please make sure the application is running on "
"your mobile phone and the right IP address and port are "
"configured in the project settings.");
@@ -39,6 +39,7 @@
#include "s60runconfigbluetoothstarter.h"
#include "codadevice.h"
#include "trkruncontrol.h"
#include "codaruncontrol.h"
#include <coreplugin/icore.h>
#include <projectexplorer/buildsteplist.h>
@@ -65,7 +66,7 @@
using namespace ProjectExplorer;
using namespace Qt4ProjectManager::Internal;
enum {debug = 0};
enum { debug = 0 };
static const quint64 DEFAULT_CHUNK_SIZE = 40000;
@@ -200,7 +201,7 @@ bool S60DeployStep::init()
}
if (debug)
m_launcher->setVerbose(1);
m_launcher->setVerbose(debug);
// Prompt the user to start up the Bluetooth connection
const trk::PromptStartCommunicationResult src =
@@ -396,7 +397,6 @@ void S60DeployStep::startDeployment()
setupConnections();
m_state = StateConnecting;
m_codaDevice->sendSerialPing(false);
QTimer::singleShot(4000, this, SLOT(checkForTimeout()));
} else {
m_codaDevice = QSharedPointer<Coda::CodaDevice>(new Coda::CodaDevice);
setupConnections();
@@ -405,8 +405,8 @@ void S60DeployStep::startDeployment()
codaSocket->connectToHost(m_address, m_port);
m_state = StateConnecting;
appendMessage(tr("Connecting to %1:%2...").arg(m_address).arg(m_port), false);
QTimer::singleShot(4000, this, SLOT(checkForTimeout()));
}
QTimer::singleShot(4000, this, SLOT(checkForTimeout()));
}
void S60DeployStep::run(QFutureInterface<bool> &fi)
@@ -458,7 +458,7 @@ void S60DeployStep::slotError(const QString &error)
void S60DeployStep::slotTrkLogMessage(const QString &log)
{
if (debug)
if (debug > 1)
qDebug() << "CODA log:" << log;
}
@@ -585,7 +585,7 @@ void S60DeployStep::putSendNextChunk()
setCopyProgress(100);
} else {
m_putLastChunkSize = data.size();
if (debug)
if (debug > 1)
qDebug("Writing %llu bytes to remote file '%s' at %llu\n",
m_putLastChunkSize,
m_remoteFileHandle.constData(), pos);
@@ -636,13 +636,7 @@ void S60DeployStep::checkForTimeout()
if (m_state != StateConnecting)
return;
const QString title = tr("Waiting for CODA");
const QString text = tr("Qt Creator is waiting for the CODA application to connect."
"\nPlease make sure the application is running on "
"your mobile phone and the right IP address or serial port is "
"configured in the project settings.");
QMessageBox *mb = new QMessageBox(QMessageBox::Information, title, text,
QMessageBox::Cancel, Core::ICore::instance()->mainWindow());
QMessageBox *mb = CodaRunControl::createCodaWaitingMessageBox(Core::ICore::instance()->mainWindow());
connect(this, SIGNAL(codaConnected()), mb, SLOT(close()));
connect(this, SIGNAL(finished()), mb, SLOT(close()));
connect(this, SIGNAL(finishNow()), mb, SLOT(close()));
+13 -3
View File
@@ -691,10 +691,11 @@ private:
inline int tryRead();
HANDLE m_handles[HandleCount];
bool m_terminated;
};
WinReaderThread::WinReaderThread(const QSharedPointer<DeviceContext> &context) :
ReaderThreadBase(context)
ReaderThreadBase(context), m_terminated(false)
{
m_handles[FileHandle] = NULL;
m_handles[TerminateEventHandle] = CreateEvent(NULL, FALSE, FALSE, NULL);
@@ -720,10 +721,18 @@ int WinReaderThread::tryRead()
// Trigger read
DWORD bytesRead = 0;
if (ReadFile(m_context->device, &buffer, bytesToRead, &bytesRead, &m_context->readOverlapped)) {
if (bytesRead == 1) {
if (m_terminated)
return 1;
switch (bytesRead) {
case 0:
Sleep(100);
break;
case 1:
processData(buffer[0]);
} else {
break;
default:
processData(QByteArray(buffer, bytesRead));
break;
}
return 0;
}
@@ -762,6 +771,7 @@ void WinReaderThread::run()
void WinReaderThread::terminate()
{
m_terminated = true;
SetEvent(m_handles[TerminateEventHandle]);
wait();
}