mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 17:01:18 +02:00
AccountManager destructor waits for any RSA key thread
This commit is contained in:
parent
545ada0abb
commit
66d39667e1
2 changed files with 22 additions and 1 deletions
|
@ -93,6 +93,13 @@ AccountManager::AccountManager(UserAgentGetter userAgentGetter) :
|
||||||
const QString DOUBLE_SLASH_SUBSTITUTE = "slashslash";
|
const QString DOUBLE_SLASH_SUBSTITUTE = "slashslash";
|
||||||
const QString ACCOUNT_MANAGER_REQUESTED_SCOPE = "owner";
|
const QString ACCOUNT_MANAGER_REQUESTED_SCOPE = "owner";
|
||||||
|
|
||||||
|
AccountManager::~AccountManager() {
|
||||||
|
QMutexLocker lock(&_rsaKeygenLock);
|
||||||
|
while (_rsaKeygenThread) {
|
||||||
|
_rsaKeygenWait.wait(&_rsaKeygenLock);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void AccountManager::logout() {
|
void AccountManager::logout() {
|
||||||
// a logout means we want to delete the DataServerAccountInfo we currently have for this URL, in-memory and in file
|
// a logout means we want to delete the DataServerAccountInfo we currently have for this URL, in-memory and in file
|
||||||
_accountInfo = DataServerAccountInfo();
|
_accountInfo = DataServerAccountInfo();
|
||||||
|
@ -761,8 +768,9 @@ void AccountManager::generateNewKeypair(bool isUserKeypair, const QUuid& domainI
|
||||||
this, &AccountManager::handleKeypairGenerationError);
|
this, &AccountManager::handleKeypairGenerationError);
|
||||||
|
|
||||||
connect(keypairGenerator, &QObject::destroyed, generateThread, &QThread::quit);
|
connect(keypairGenerator, &QObject::destroyed, generateThread, &QThread::quit);
|
||||||
connect(this, &QObject::destroyed, generateThread, &QThread::quit);
|
connect(generateThread, &QThread::finished, this, &AccountManager::rsaKeygenThreadFinished);
|
||||||
connect(generateThread, &QThread::finished, generateThread, &QThread::deleteLater);
|
connect(generateThread, &QThread::finished, generateThread, &QThread::deleteLater);
|
||||||
|
_rsaKeygenThread = generateThread;
|
||||||
|
|
||||||
keypairGenerator->moveToThread(generateThread);
|
keypairGenerator->moveToThread(generateThread);
|
||||||
|
|
||||||
|
@ -870,3 +878,9 @@ void AccountManager::handleKeypairGenerationError() {
|
||||||
|
|
||||||
sender()->deleteLater();
|
sender()->deleteLater();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AccountManager::rsaKeygenThreadFinished() {
|
||||||
|
QMutexLocker lock(&_rsaKeygenLock);
|
||||||
|
_rsaKeygenThread = nullptr;
|
||||||
|
_rsaKeygenWait.wakeAll();
|
||||||
|
}
|
||||||
|
|
|
@ -15,6 +15,8 @@
|
||||||
#include <QtCore/QByteArray>
|
#include <QtCore/QByteArray>
|
||||||
#include <QtCore/QObject>
|
#include <QtCore/QObject>
|
||||||
#include <QtCore/QUrl>
|
#include <QtCore/QUrl>
|
||||||
|
#include <QtCore/QMutex>
|
||||||
|
#include <QtCore/QWaitCondition>
|
||||||
#include <QtNetwork/QNetworkReply>
|
#include <QtNetwork/QNetworkReply>
|
||||||
#include <QUrlQuery>
|
#include <QUrlQuery>
|
||||||
|
|
||||||
|
@ -63,6 +65,7 @@ class AccountManager : public QObject, public Dependency {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
AccountManager(UserAgentGetter userAgentGetter = DEFAULT_USER_AGENT_GETTER);
|
AccountManager(UserAgentGetter userAgentGetter = DEFAULT_USER_AGENT_GETTER);
|
||||||
|
~AccountManager();
|
||||||
|
|
||||||
Q_INVOKABLE void sendRequest(const QString& path,
|
Q_INVOKABLE void sendRequest(const QString& path,
|
||||||
AccountManagerAuth::Type authType,
|
AccountManagerAuth::Type authType,
|
||||||
|
@ -131,6 +134,7 @@ private slots:
|
||||||
void publicKeyUploadSucceeded(QNetworkReply& reply);
|
void publicKeyUploadSucceeded(QNetworkReply& reply);
|
||||||
void publicKeyUploadFailed(QNetworkReply& reply);
|
void publicKeyUploadFailed(QNetworkReply& reply);
|
||||||
void generateNewKeypair(bool isUserKeypair = true, const QUuid& domainID = QUuid());
|
void generateNewKeypair(bool isUserKeypair = true, const QUuid& domainID = QUuid());
|
||||||
|
void rsaKeygenThreadFinished();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
AccountManager(AccountManager const& other) = delete;
|
AccountManager(AccountManager const& other) = delete;
|
||||||
|
@ -156,6 +160,9 @@ private:
|
||||||
QByteArray _pendingPrivateKey;
|
QByteArray _pendingPrivateKey;
|
||||||
|
|
||||||
QUuid _sessionID { QUuid::createUuid() };
|
QUuid _sessionID { QUuid::createUuid() };
|
||||||
|
QMutex _rsaKeygenLock;
|
||||||
|
QWaitCondition _rsaKeygenWait;
|
||||||
|
QThread* _rsaKeygenThread { nullptr };
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // hifi_AccountManager_h
|
#endif // hifi_AccountManager_h
|
||||||
|
|
Loading…
Reference in a new issue