summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>2010-07-05 17:14:45 +0200
committerFriedemann Kleint <Friedemann.Kleint@nokia.com>2010-07-05 17:14:45 +0200
commit9bb67101c5daa42f879f2fcf884277c5fd23bed4 (patch)
treede98a7c3486831ec7aaa961ce3e1b2bb049b2fbc /src
parent1ff095eec2c7b5ee63449c0b9c705cfe79d96e67 (diff)
downloadqt-creator-9bb67101c5daa42f879f2fcf884277c5fd23bed4.tar.gz
Trk[TCF]: Proper exit handling
Diffstat (limited to 'src')
-rw-r--r--src/plugins/debugger/gdb/tcftrkgdbadapter.cpp13
-rw-r--r--src/shared/symbianutils/tcftrkdevice.cpp10
-rw-r--r--src/shared/symbianutils/tcftrkdevice.h5
3 files changed, 20 insertions, 8 deletions
diff --git a/src/plugins/debugger/gdb/tcftrkgdbadapter.cpp b/src/plugins/debugger/gdb/tcftrkgdbadapter.cpp
index 380e304373..fd2208e14b 100644
--- a/src/plugins/debugger/gdb/tcftrkgdbadapter.cpp
+++ b/src/plugins/debugger/gdb/tcftrkgdbadapter.cpp
@@ -598,8 +598,11 @@ void TcfTrkGdbAdapter::handleGdbServerCommand(const QByteArray &cmd)
else if (cmd == "k" || cmd.startsWith("vKill")) {
// Kill inferior process
logMessage(msgGdbPacket(QLatin1String("kill")));
- m_trkDevice->sendProcessTerminateCommand(TcfTrkCallback(),
- m_tcfProcessId);
+ // Requires id of main thread to terminate.
+ // Note that calling 'Settings|set|removeExecutable' crashes TCF TRK,
+ // so, it is apparently not required.
+ m_trkDevice->sendRunControlTerminateCommand(TcfTrkCallback(),
+ mainThreadContextId());
}
else if (cmd.startsWith('m')) {
@@ -1066,12 +1069,6 @@ void TcfTrkGdbAdapter::cleanup()
if (!m_trkIODevice.isNull()) {
QAbstractSocket *socket = qobject_cast<QAbstractSocket *>(m_trkIODevice.data());
const bool isOpen = socket ? socket->state() == QAbstractSocket::ConnectedState : m_trkIODevice->isOpen();
- if (isOpen) { // Not sure if that is required: Remove Trk's context?
- if (!m_remoteExecutable.isEmpty() && m_uid) {
- m_trkDevice->sendSettingsRemoveExecutableCommand(m_remoteExecutable, m_uid);
- m_uid = 0;
- }
- }
if (isOpen) {
if (socket) {
socket->disconnect();
diff --git a/src/shared/symbianutils/tcftrkdevice.cpp b/src/shared/symbianutils/tcftrkdevice.cpp
index 4dfb41637f..723d5e95d8 100644
--- a/src/shared/symbianutils/tcftrkdevice.cpp
+++ b/src/shared/symbianutils/tcftrkdevice.cpp
@@ -689,6 +689,16 @@ void TcfTrkDevice::sendProcessTerminateCommand(const TcfTrkCallback &callBack,
sendTcfTrkMessage(MessageWithReply, ProcessesService, "terminate", data, callBack, cookie);
}
+void TcfTrkDevice::sendRunControlTerminateCommand(const TcfTrkCallback &callBack,
+ const QByteArray &id,
+ const QVariant &cookie)
+{
+ QByteArray data;
+ JsonInputStream str(data);
+ str << id;
+ sendTcfTrkMessage(MessageWithReply, RunControlService, "terminate", data, callBack, cookie);
+}
+
// Non-standard: Remove executable from settings
void TcfTrkDevice::sendSettingsRemoveExecutableCommand(const QString &binaryIn,
unsigned uid,
diff --git a/src/shared/symbianutils/tcftrkdevice.h b/src/shared/symbianutils/tcftrkdevice.h
index bfe8bbbbf3..bb4c1849a0 100644
--- a/src/shared/symbianutils/tcftrkdevice.h
+++ b/src/shared/symbianutils/tcftrkdevice.h
@@ -158,6 +158,11 @@ public:
const QStringList &additionalLibraries = QStringList(),
const QVariant &cookie = QVariant());
+ // Preferred over Processes:Terminate by TCF TRK.
+ void sendRunControlTerminateCommand(const TcfTrkCallback &callBack,
+ const QByteArray &id,
+ const QVariant &cookie = QVariant());
+
void sendProcessTerminateCommand(const TcfTrkCallback &callBack,
const QByteArray &id,
const QVariant &cookie = QVariant());