mirror of
https://github.com/overte-org/overte.git
synced 2025-04-14 04:07:11 +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 ACCOUNT_MANAGER_REQUESTED_SCOPE = "owner";
|
||||
|
||||
AccountManager::~AccountManager() {
|
||||
QMutexLocker lock(&_rsaKeygenLock);
|
||||
while (_rsaKeygenThread) {
|
||||
_rsaKeygenWait.wait(&_rsaKeygenLock);
|
||||
}
|
||||
}
|
||||
|
||||
void AccountManager::logout() {
|
||||
// a logout means we want to delete the DataServerAccountInfo we currently have for this URL, in-memory and in file
|
||||
_accountInfo = DataServerAccountInfo();
|
||||
|
@ -761,8 +768,9 @@ void AccountManager::generateNewKeypair(bool isUserKeypair, const QUuid& domainI
|
|||
this, &AccountManager::handleKeypairGenerationError);
|
||||
|
||||
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);
|
||||
_rsaKeygenThread = generateThread;
|
||||
|
||||
keypairGenerator->moveToThread(generateThread);
|
||||
|
||||
|
@ -870,3 +878,9 @@ void AccountManager::handleKeypairGenerationError() {
|
|||
|
||||
sender()->deleteLater();
|
||||
}
|
||||
|
||||
void AccountManager::rsaKeygenThreadFinished() {
|
||||
QMutexLocker lock(&_rsaKeygenLock);
|
||||
_rsaKeygenThread = nullptr;
|
||||
_rsaKeygenWait.wakeAll();
|
||||
}
|
||||
|
|
|
@ -15,6 +15,8 @@
|
|||
#include <QtCore/QByteArray>
|
||||
#include <QtCore/QObject>
|
||||
#include <QtCore/QUrl>
|
||||
#include <QtCore/QMutex>
|
||||
#include <QtCore/QWaitCondition>
|
||||
#include <QtNetwork/QNetworkReply>
|
||||
#include <QUrlQuery>
|
||||
|
||||
|
@ -63,6 +65,7 @@ class AccountManager : public QObject, public Dependency {
|
|||
Q_OBJECT
|
||||
public:
|
||||
AccountManager(UserAgentGetter userAgentGetter = DEFAULT_USER_AGENT_GETTER);
|
||||
~AccountManager();
|
||||
|
||||
Q_INVOKABLE void sendRequest(const QString& path,
|
||||
AccountManagerAuth::Type authType,
|
||||
|
@ -131,6 +134,7 @@ private slots:
|
|||
void publicKeyUploadSucceeded(QNetworkReply& reply);
|
||||
void publicKeyUploadFailed(QNetworkReply& reply);
|
||||
void generateNewKeypair(bool isUserKeypair = true, const QUuid& domainID = QUuid());
|
||||
void rsaKeygenThreadFinished();
|
||||
|
||||
private:
|
||||
AccountManager(AccountManager const& other) = delete;
|
||||
|
@ -156,6 +160,9 @@ private:
|
|||
QByteArray _pendingPrivateKey;
|
||||
|
||||
QUuid _sessionID { QUuid::createUuid() };
|
||||
QMutex _rsaKeygenLock;
|
||||
QWaitCondition _rsaKeygenWait;
|
||||
QThread* _rsaKeygenThread { nullptr };
|
||||
};
|
||||
|
||||
#endif // hifi_AccountManager_h
|
||||
|
|
Loading…
Reference in a new issue