aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/ssh
diff options
context:
space:
mode:
authorJarek Kobus <[email protected]>2021-12-28 12:07:52 +0100
committerJarek Kobus <[email protected]>2022-02-15 09:17:08 +0000
commit7a45f7f01f1d4adc0bb2e51fe9906fc0699acbc4 (patch)
tree44dc3feed20c2d5eb6465fb84155e6a078658ecd /src/libs/ssh
parentf7a585fad9bcb8e1ce305c18cbbe1508b5f9f844 (diff)
Make SshSettings thread safe
Change-Id: Iac07ee51574c348a22c6a966eb2113c53402b88d Reviewed-by: hjk <[email protected]> Reviewed-by: Artem Sokolovskii <[email protected]> Reviewed-by: Qt CI Bot <[email protected]>
Diffstat (limited to 'src/libs/ssh')
-rw-r--r--src/libs/ssh/sshsettings.cpp46
1 files changed, 41 insertions, 5 deletions
diff --git a/src/libs/ssh/sshsettings.cpp b/src/libs/ssh/sshsettings.cpp
index 98446b752f1..571ca5c1afa 100644
--- a/src/libs/ssh/sshsettings.cpp
+++ b/src/libs/ssh/sshsettings.cpp
@@ -28,6 +28,7 @@
#include <utils/environment.h>
#include <utils/hostosinfo.h>
+#include <QReadWriteLock>
#include <QSettings>
using namespace Utils;
@@ -44,6 +45,7 @@ struct SshSettings
FilePath askpassFilePath;
FilePath keygenFilePath;
QSsh::SshSettings::SearchPathRetriever searchPathRetriever = [] { return FilePaths(); };
+ QReadWriteLock lock;
};
} // namespace Internal
@@ -72,6 +74,7 @@ static QString keygenFilePathKey() { return QString("KeygenFilePath"); }
void SshSettings::loadSettings(QSettings *settings)
{
+ QWriteLocker locker(&sshSettings->lock);
AccessSettingsGroup g(settings);
QVariant value = settings->value(connectionSharingKey());
if (value.isValid() && !HostOsInfo::isWindowsHost())
@@ -89,6 +92,7 @@ void SshSettings::loadSettings(QSettings *settings)
void SshSettings::storeSettings(QSettings *settings)
{
+ QReadLocker locker(&sshSettings->lock);
AccessSettingsGroup g(settings);
settings->setValue(connectionSharingKey(), sshSettings->useConnectionSharing);
settings->setValue(connectionSharingTimeoutKey(),
@@ -101,19 +105,27 @@ void SshSettings::storeSettings(QSettings *settings)
void SshSettings::setConnectionSharingEnabled(bool share)
{
+ QWriteLocker locker(&sshSettings->lock);
sshSettings->useConnectionSharing = share;
}
-bool SshSettings::connectionSharingEnabled() { return sshSettings->useConnectionSharing; }
+bool SshSettings::connectionSharingEnabled()
+{
+ QReadLocker locker(&sshSettings->lock);
+ return sshSettings->useConnectionSharing;
+}
void SshSettings::setConnectionSharingTimeout(int timeInMinutes)
{
+ QWriteLocker locker(&sshSettings->lock);
sshSettings->connectionSharingTimeOutInMinutes = timeInMinutes;
}
int SshSettings::connectionSharingTimeout()
{
+ QReadLocker locker(&sshSettings->lock);
return sshSettings->connectionSharingTimeOutInMinutes;
}
+// Keep read locker locked while calling this method
static FilePath filePathValue(const FilePath &value, const QStringList &candidateFileNames)
{
if (!value.isEmpty())
@@ -128,24 +140,45 @@ static FilePath filePathValue(const FilePath &value, const QStringList &candidat
return FilePath();
}
+// Keep read locker locked while calling this method
static FilePath filePathValue(const FilePath &value, const QString &candidateFileName)
{
return filePathValue(value, QStringList(candidateFileName));
}
-void SshSettings::setSshFilePath(const FilePath &ssh) { sshSettings->sshFilePath = ssh; }
-FilePath SshSettings::sshFilePath() { return filePathValue(sshSettings->sshFilePath, "ssh"); }
+void SshSettings::setSshFilePath(const FilePath &ssh)
+{
+ QWriteLocker locker(&sshSettings->lock);
+ sshSettings->sshFilePath = ssh;
+}
+
+FilePath SshSettings::sshFilePath()
+{
+ QReadLocker locker(&sshSettings->lock);
+ return filePathValue(sshSettings->sshFilePath, "ssh");
+}
+
+void SshSettings::setSftpFilePath(const FilePath &sftp)
+{
+ QWriteLocker locker(&sshSettings->lock);
+ sshSettings->sftpFilePath = sftp;
+}
-void SshSettings::setSftpFilePath(const FilePath &sftp) { sshSettings->sftpFilePath = sftp; }
-FilePath SshSettings::sftpFilePath() { return filePathValue(sshSettings->sftpFilePath, "sftp"); }
+FilePath SshSettings::sftpFilePath()
+{
+ QReadLocker locker(&sshSettings->lock);
+ return filePathValue(sshSettings->sftpFilePath, "sftp");
+}
void SshSettings::setAskpassFilePath(const FilePath &askPass)
{
+ QWriteLocker locker(&sshSettings->lock);
sshSettings->askpassFilePath = askPass;
}
FilePath SshSettings::askpassFilePath()
{
+ QReadLocker locker(&sshSettings->lock);
FilePath candidate;
candidate = sshSettings->askpassFilePath;
if (candidate.isEmpty())
@@ -155,16 +188,19 @@ FilePath SshSettings::askpassFilePath()
void SshSettings::setKeygenFilePath(const FilePath &keygen)
{
+ QWriteLocker locker(&sshSettings->lock);
sshSettings->keygenFilePath = keygen;
}
FilePath SshSettings::keygenFilePath()
{
+ QReadLocker locker(&sshSettings->lock);
return filePathValue(sshSettings->keygenFilePath, "ssh-keygen");
}
void SshSettings::setExtraSearchPathRetriever(const SearchPathRetriever &pathRetriever)
{
+ QWriteLocker locker(&sshSettings->lock);
sshSettings->searchPathRetriever = pathRetriever;
}