Maemo: Fix race condition in remote mounter.

Wait until UTFS client has detached before starting the server.
This commit is contained in:
qt-info@nokia.com
2010-08-12 12:24:11 +02:00
committed by ck
parent 76561b928c
commit d8bdafd4d3
2 changed files with 6 additions and 28 deletions

View File

@@ -229,7 +229,7 @@ void MaemoRemoteMounter::startUtfsClients()
const QString chmod = QString::fromLocal8Bit("%1 chmod a+r+w+x %2") const QString chmod = QString::fromLocal8Bit("%1 chmod a+r+w+x %2")
.arg(MaemoGlobal::remoteSudo(), mountSpec.remoteMountPoint); .arg(MaemoGlobal::remoteSudo(), mountSpec.remoteMountPoint);
QString utfsClient QString utfsClient
= QString::fromLocal8Bit("%1 -l %2 -r %2 -b %2 %4") = QString::fromLocal8Bit("%1 --detach -l %2 -r %2 -b %2 %4")
.arg(utfsClientOnDevice()).arg(mountSpec.remotePort) .arg(utfsClientOnDevice()).arg(mountSpec.remotePort)
.arg(mountSpec.remoteMountPoint); .arg(mountSpec.remoteMountPoint);
if (m_mountSpecs.at(i).mountAsRoot) if (m_mountSpecs.at(i).mountAsRoot)
@@ -240,8 +240,6 @@ void MaemoRemoteMounter::startUtfsClients()
emit reportProgress(tr("Starting remote UTFS clients...")); emit reportProgress(tr("Starting remote UTFS clients..."));
m_utfsClientStderr.clear(); m_utfsClientStderr.clear();
m_mountProcess = m_connection->createRemoteProcess(remoteCall.toUtf8()); m_mountProcess = m_connection->createRemoteProcess(remoteCall.toUtf8());
connect(m_mountProcess.data(), SIGNAL(started()), this,
SLOT(handleUtfsClientsStarted()));
connect(m_mountProcess.data(), SIGNAL(closed(int)), this, connect(m_mountProcess.data(), SIGNAL(closed(int)), this,
SLOT(handleUtfsClientsFinished(int))); SLOT(handleUtfsClientsFinished(int)));
connect(m_mountProcess.data(), SIGNAL(errorOutputAvailable(QByteArray)), connect(m_mountProcess.data(), SIGNAL(errorOutputAvailable(QByteArray)),
@@ -249,36 +247,17 @@ void MaemoRemoteMounter::startUtfsClients()
m_mountProcess->start(); m_mountProcess->start();
} }
void MaemoRemoteMounter::handleUtfsClientsStarted()
{
if (!m_stop)
startUtfsServers();
}
void MaemoRemoteMounter::handleUtfsClientsFinished(int exitStatus) void MaemoRemoteMounter::handleUtfsClientsFinished(int exitStatus)
{ {
if (m_stop) if (m_stop)
return; return;
QString errMsg; if (exitStatus == SshRemoteProcess::ExitedNormally
switch (exitStatus) { && m_mountProcess->exitCode() == 0) {
case SshRemoteProcess::FailedToStart: startUtfsServers();
errMsg = tr("Could not execute mount request."); } else {
break; QString errMsg = tr("Failure running UTFS client: %1")
case SshRemoteProcess::KilledBySignal:
errMsg = tr("Failure running UTFS client: %1")
.arg(m_mountProcess->errorString()); .arg(m_mountProcess->errorString());
break;
case SshRemoteProcess::ExitedNormally:
if (m_mountProcess->exitCode() != 0)
errMsg = tr("Could not execute mount request.");
break;
default:
Q_ASSERT_X(false, Q_FUNC_INFO,
"Impossible SshRemoteProcess exit status.");
}
if (!errMsg.isEmpty()) {
if (!m_utfsClientStderr.isEmpty()) if (!m_utfsClientStderr.isEmpty())
errMsg += tr("\nstderr was: '%1'") errMsg += tr("\nstderr was: '%1'")
.arg(QString::fromUtf8(m_utfsClientStderr)); .arg(QString::fromUtf8(m_utfsClientStderr));

View File

@@ -76,7 +76,6 @@ private slots:
void handleUploaderInitialized(); void handleUploaderInitialized();
void handleUploaderInitializationFailed(const QString &reason); void handleUploaderInitializationFailed(const QString &reason);
void handleUploadFinished(Core::SftpJobId jobId, const QString &error); void handleUploadFinished(Core::SftpJobId jobId, const QString &error);
void handleUtfsClientsStarted();
void handleUtfsClientsFinished(int exitStatus); void handleUtfsClientsFinished(int exitStatus);
void handleUnmountProcessFinished(int exitStatus); void handleUnmountProcessFinished(int exitStatus);
void handleUtfsClientStderr(const QByteArray &output); void handleUtfsClientStderr(const QByteArray &output);