summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/coreplugin/ssh/sshchannel.cpp1
-rw-r--r--src/plugins/coreplugin/ssh/sshconnection.cpp1
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp1
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.h1
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp4
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.cpp75
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.h4
7 files changed, 57 insertions, 30 deletions
diff --git a/src/plugins/coreplugin/ssh/sshchannel.cpp b/src/plugins/coreplugin/ssh/sshchannel.cpp
index 0d809171a3..39c3fffbce 100644
--- a/src/plugins/coreplugin/ssh/sshchannel.cpp
+++ b/src/plugins/coreplugin/ssh/sshchannel.cpp
@@ -234,7 +234,6 @@ void AbstractSshChannel::closeChannel()
setChannelState(CloseRequested);
m_sendFacility.sendChannelEofPacket(m_remoteChannel);
m_sendFacility.sendChannelClosePacket(m_remoteChannel);
- m_timeoutTimer->start(ReplyTimeout);
}
}
}
diff --git a/src/plugins/coreplugin/ssh/sshconnection.cpp b/src/plugins/coreplugin/ssh/sshconnection.cpp
index 1746785a61..0a98068a2e 100644
--- a/src/plugins/coreplugin/ssh/sshconnection.cpp
+++ b/src/plugins/coreplugin/ssh/sshconnection.cpp
@@ -406,6 +406,7 @@ void SshConnectionPrivate::handleUserAuthSuccessPacket()
void SshConnectionPrivate::handleUserAuthFailurePacket()
{
+ m_timeoutTimer.stop();
const QString errorMsg = m_connParams.authType == SshConnectionParameters::AuthByPwd
? tr("Server rejected password.") : tr("Server rejected key.");
throw SshClientException(SshAuthenticationError, errorMsg);
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp
index e4080c750c..43bed218f1 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp
@@ -195,6 +195,7 @@ const MaemoPackageCreationStep *MaemoDeployStep::packagingStep() const
void MaemoDeployStep::raiseError(const QString &errorString)
{
+ disconnect(m_connection.data(), 0, this, 0);
emit addTask(Task(Task::Error, errorString, QString(), -1,
Constants::TASK_CATEGORY_BUILDSYSTEM));
emit error();
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.h b/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.h
index 559109cb85..30a13f4f81 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.h
@@ -83,6 +83,7 @@ public:
const MaemoDeployable &deployable) const;
void setDeployed(const QString &host, const MaemoDeployable &deployable);
MaemoDeployables *deployables() const { return m_deployables; }
+ QSharedPointer<Core::SshConnection> sshConnection() const { return m_connection; }
signals:
void done();
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp
index 74fbe1d508..7d8d72b44d 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemoruncontrol.cpp
@@ -145,9 +145,9 @@ bool MaemoRunControl::isRunning() const
void MaemoRunControl::handleError(const QString &errString)
{
- QMessageBox::critical(0, tr("Remote Execution Failure"), errString);
- emit appendMessage(this, errString, true);
stop();
+ emit appendMessage(this, errString, true);
+ QMessageBox::critical(0, tr("Remote Execution Failure"), errString);
}
void MaemoRunControl::setFinished()
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.cpp
index 91d361df10..4a9d18e18e 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.cpp
@@ -34,6 +34,7 @@
#include "maemosshrunner.h"
+#include "maemodeploystep.h"
#include "maemodeviceconfigurations.h"
#include "maemoglobal.h"
#include "maemoremotemounter.h"
@@ -89,9 +90,10 @@ void MaemoSshRunner::start()
m_exitStatus = -1;
if (m_connection)
disconnect(m_connection.data(), 0, this, 0);
- const bool reUse = m_connection
- && m_connection->state() == SshConnection::Connected
- && m_connection->connectionParameters() == m_devConfig.server;
+ bool reUse = isConnectionUsable();
+ if (!reUse)
+ m_connection = m_runConfig->deployStep()->sshConnection();
+ reUse = isConnectionUsable();
if (!reUse)
m_connection = SshConnection::create();
connect(m_connection.data(), SIGNAL(connected()), this,
@@ -112,7 +114,6 @@ void MaemoSshRunner::stop()
return;
m_stop = true;
- disconnect(m_connection.data(), 0, this, 0);
m_mounter->stop();
if (m_cleaner)
disconnect(m_cleaner.data(), 0, this, 0);
@@ -135,6 +136,9 @@ void MaemoSshRunner::handleConnectionFailure()
void MaemoSshRunner::cleanup(bool initialCleanup)
{
+ if (!isConnectionUsable())
+ return;
+
emit reportProgress(tr("Killing remote process(es)..."));
m_shuttingDown = !initialCleanup;
QString niceKill;
@@ -159,6 +163,7 @@ void MaemoSshRunner::handleCleanupFinished(int exitStatus)
|| exitStatus == SshRemoteProcess::ExitedNormally);
if (m_shuttingDown) {
+ m_unmountState = ShutdownUnmount;
m_mounter->unmount();
return;
}
@@ -171,13 +176,44 @@ void MaemoSshRunner::handleCleanupFinished(int exitStatus)
.arg(m_cleaner->errorString()));
} else {
m_mounter->setConnection(m_connection);
+ m_unmountState = InitialUnmount;
m_mounter->unmount();
}
}
void MaemoSshRunner::handleUnmounted()
{
- if (m_shuttingDown) {
+ switch (m_unmountState) {
+ case InitialUnmount: {
+ if (m_stop)
+ return;
+ MaemoPortList portList = m_devConfig.freePorts();
+ if (m_debugging && !m_runConfig->useRemoteGdb())
+ portList.getNext(); // One has already been used for gdbserver.
+ m_mounter->setPortList(portList);
+ const MaemoRemoteMountsModel * const remoteMounts
+ = m_runConfig->remoteMounts();
+ for (int i = 0; i < remoteMounts->mountSpecificationCount(); ++i) {
+ if (!addMountSpecification(remoteMounts->mountSpecificationAt(i)))
+ return;
+ }
+ if (m_debugging && m_runConfig->useRemoteGdb()) {
+ if (!addMountSpecification(MaemoMountSpecification(
+ m_runConfig->localDirToMountForRemoteGdb(),
+ MaemoGlobal::remoteProjectSourcesMountPoint())))
+ return;
+ }
+ m_unmountState = PreMountUnmount;
+ m_mounter->unmount();
+ break;
+ }
+ case PreMountUnmount:
+ if (m_stop)
+ return;
+ m_mounter->mount();
+ break;
+ case ShutdownUnmount:
+ Q_ASSERT(m_shuttingDown);
m_shuttingDown = false;
if (m_exitStatus == SshRemoteProcess::ExitedNormally) {
emit remoteProcessFinished(m_runner->exitCode());
@@ -188,29 +224,8 @@ void MaemoSshRunner::handleUnmounted()
.arg(m_runner->errorString()));
}
m_exitStatus = -1;
- return;
+ break;
}
-
- if (m_stop)
- return;
-
- MaemoPortList portList = m_devConfig.freePorts();
- if (m_debugging && !m_runConfig->useRemoteGdb())
- portList.getNext(); // One has already been used for gdbserver.
- m_mounter->setPortList(portList);
- const MaemoRemoteMountsModel * const remoteMounts
- = m_runConfig->remoteMounts();
- for (int i = 0; i < remoteMounts->mountSpecificationCount(); ++i) {
- if (!addMountSpecification(remoteMounts->mountSpecificationAt(i)))
- return;
- }
- if (m_debugging && m_runConfig->useRemoteGdb()) {
- if (!addMountSpecification(MaemoMountSpecification(
- m_runConfig->localDirToMountForRemoteGdb(),
- MaemoGlobal::remoteProjectSourcesMountPoint())))
- return;
- }
- m_mounter->mount();
}
void MaemoSshRunner::handleMounted()
@@ -265,6 +280,12 @@ bool MaemoSshRunner::addMountSpecification(const MaemoMountSpecification &mountS
return true;
}
+bool MaemoSshRunner::isConnectionUsable() const
+{
+ return m_connection && m_connection->state() == SshConnection::Connected
+ && m_connection->connectionParameters() == m_devConfig.server;
+}
+
} // namespace Internal
} // namespace Qt4ProjectManager
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.h b/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.h
index e84a1cb014..de079d8c27 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.h
@@ -90,6 +90,7 @@ private slots:
private:
void cleanup(bool initialCleanup);
bool addMountSpecification(const MaemoMountSpecification &mountSpec);
+ bool isConnectionUsable() const;
MaemoRunConfiguration * const m_runConfig; // TODO this pointer can be invalid
MaemoRemoteMounter * const m_mounter;
@@ -104,6 +105,9 @@ private:
int m_exitStatus;
bool m_shuttingDown;
const bool m_debugging;
+
+ enum UnmountState { InitialUnmount, PreMountUnmount, ShutdownUnmount };
+ UnmountState m_unmountState;
};
} // namespace Internal