[SCM] kdeconnect packaging branch, master, updated. debian/0.9g-1-1183-g9d69498
Maximiliano Curia
maxy at moszumanska.debian.org
Fri Oct 14 14:29:16 UTC 2016
Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-extras/kdeconnect.git;a=commitdiff;h=30f00fb
The following commit has been merged in the master branch:
commit 30f00fb3fae1f3af7eb7aae4c31b0aa994288001
Author: Albert Vaca <albertvaka at gmail.com>
Date: Sat Oct 17 17:31:17 2015 -0700
Fix a crash where unmount was called again after m_proc had been destroyed
This happened because of scheduling m_proc->kill() from unmount 5 seconds
after the destructor was called (which was who called unmount first).
Simplified unmount logic a bit as well. Known bug: we might end with a fuse
mountpoint still mounted after killing the sshfs process.
BUG: 352861
---
plugins/sftp/mounter.cpp | 55 +++++++++++++++++++-----------------------------
plugins/sftp/mounter.h | 5 ++---
2 files changed, 24 insertions(+), 36 deletions(-)
diff --git a/plugins/sftp/mounter.cpp b/plugins/sftp/mounter.cpp
index b83e55f..6eebc7b 100644
--- a/plugins/sftp/mounter.cpp
+++ b/plugins/sftp/mounter.cpp
@@ -48,13 +48,13 @@ Mounter::Mounter(SftpPlugin* sftp)
m_connectTimer.setSingleShot(true);
QTimer::singleShot(0, this, SLOT(start()));
- qCDebug(KDECONNECT_PLUGIN_SFTP) << "Created";
+ qCDebug(KDECONNECT_PLUGIN_SFTP) << "Created mounter";
}
Mounter::~Mounter()
{
+ qCDebug(KDECONNECT_PLUGIN_SFTP) << "Destroy mounter";
unmount();
- qCDebug(KDECONNECT_PLUGIN_SFTP) << "Destroyed";
}
bool Mounter::wait()
@@ -95,12 +95,14 @@ void Mounter::onPakcageReceived(const NetworkPackage& np)
* Q_EMIT mounted();
*/
- m_proc.reset(new KProcess(this));
+ unmount();
+
+ m_proc = new KProcess(this);
m_proc->setOutputChannelMode(KProcess::MergedChannels);
- connect(m_proc.data(), SIGNAL(started()), SLOT(onStarted()));
- connect(m_proc.data(), SIGNAL(error(QProcess::ProcessError)), SLOT(onError(QProcess::ProcessError)));
- connect(m_proc.data(), SIGNAL(finished(int,QProcess::ExitStatus)), SLOT(onFinished(int,QProcess::ExitStatus)));
+ connect(m_proc, SIGNAL(started()), SLOT(onStarted()));
+ connect(m_proc, SIGNAL(error(QProcess::ProcessError)), SLOT(onError(QProcess::ProcessError)));
+ connect(m_proc, SIGNAL(finished(int,QProcess::ExitStatus)), SLOT(onFinished(int,QProcess::ExitStatus)));
QDir().mkpath(m_mountPoint);
@@ -125,12 +127,6 @@ void Mounter::onPakcageReceived(const NetworkPackage& np)
m_proc->setProgram(program, arguments);
- //To debug
- //m_proc->setStandardOutputFile("/tmp/kdeconnect-sftp.out");
- //m_proc->setStandardErrorFile("/tmp/kdeconnect-sftp.err");
-
- cleanMountPoint();
-
qCDebug(KDECONNECT_PLUGIN_SFTP) << "Starting process: " << m_proc->program().join(" ");
m_proc->start();
}
@@ -140,11 +136,13 @@ void Mounter::onStarted()
qCDebug(KDECONNECT_PLUGIN_SFTP) << "Process started";
m_started = true;
Q_EMIT mounted();
-
- connect(m_proc.data(), &KProcess::readyReadStandardError, [this]() {
+
+ //m_proc->setStandardOutputFile("/tmp/kdeconnect-sftp.out");
+ //m_proc->setStandardErrorFile("/tmp/kdeconnect-sftp.err");
+ connect(m_proc, &KProcess::readyReadStandardError, [this]() {
qCDebug(KDECONNECT_PLUGIN_SFTP) << "stderr: " << m_proc->readAll();
});
- connect(m_proc.data(), &KProcess::readyReadStandardOutput, [this]() {
+ connect(m_proc, &KProcess::readyReadStandardOutput, [this]() {
qCDebug(KDECONNECT_PLUGIN_SFTP) << "stdout:" << m_proc->readAll();
});
}
@@ -172,9 +170,7 @@ void Mounter::onFinished(int exitCode, QProcess::ExitStatus exitStatus)
Q_EMIT failed(i18n("Error when accessing to filesystem"));
}
- cleanMountPoint();
- m_proc.reset();
- m_started = false;
+ unmount();
}
void Mounter::onMountTimeout()
@@ -192,25 +188,18 @@ void Mounter::start()
m_connectTimer.start();
}
-void Mounter::cleanMountPoint()
-{
- qCDebug(KDECONNECT_PLUGIN_SFTP()) << "cleanMountPoint";
- KProcess::execute(QStringList() << "fusermount" << "-u" << m_mountPoint, 10000);
-}
-
void Mounter::unmount()
{
+ qCDebug(KDECONNECT_PLUGIN_SFTP) << "Unmount" << m_proc;
if (m_proc)
{
- cleanMountPoint();
- if (m_proc)
- {
- m_proc->terminate();
- QTimer::singleShot(5000, m_proc.data(), SLOT(kill()));
- m_proc->waitForFinished();
- }
+ auto toDestroy = m_proc;
+ m_proc = nullptr; //So we don't reenter this code path when onFinished gets called
+ toDestroy->kill();
+ delete toDestroy;
+ //Free mount point (won't always succeed if the path is in use)
+ KProcess::execute(QStringList() << "fusermount" << "-u" << m_mountPoint, 10000);
}
-
- m_started = false;
+ m_started = false;
}
diff --git a/plugins/sftp/mounter.h b/plugins/sftp/mounter.h
index 76ac860..bb2d3f5 100644
--- a/plugins/sftp/mounter.h
+++ b/plugins/sftp/mounter.h
@@ -51,13 +51,12 @@ private Q_SLOTS:
void onMountTimeout();
void start();
-private:
- void cleanMountPoint();
+private:
void unmount();
private:
SftpPlugin* m_sftp;
- QScopedPointer<KProcess> m_proc;
+ KProcess* m_proc;
QTimer m_connectTimer;
QString m_mountPoint;
bool m_started;
--
kdeconnect packaging
More information about the pkg-kde-commits
mailing list