From 0a82e68f86a3b4716ebada39c041a6c8673d2999 Mon Sep 17 00:00:00 2001 From: Kitsune Ral Date: Thu, 17 Oct 2019 09:59:37 +0900 Subject: Connection::joinRoom: make sure the room object is created early enough All direct slots connected to finished() will run before success() is even emitted; so create the room object in the earliest slot connected to finished(), rather than to success(). --- lib/connection.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/connection.cpp b/lib/connection.cpp index 2c5bf574..25f1c3f6 100644 --- a/lib/connection.cpp +++ b/lib/connection.cpp @@ -534,10 +534,14 @@ JoinRoomJob* Connection::joinRoom(const QString& roomAlias, const QStringList& serverNames) { auto job = callApi(roomAlias, serverNames); - // Upon completion, ensure a room object in Join state is created but only - // if it's not already there due to a sync completing earlier. - connect(job, &JoinRoomJob::success, this, - [this, job] { provideRoom(job->roomId()); }); + // Upon completion, ensure a room object in Join state is created + // (or it might already be there due to a sync completing earlier). + // finished() is used here instead of success() to overtake clients + // that may add their own slots to finished(). + connect(job, &BaseJob::finished, this, [this, job] { + if (job->status().good()) + provideRoom(job->roomId()); + }); return job; } -- cgit v1.2.3