aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/connection.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/lib/connection.cpp b/lib/connection.cpp
index 2bdbb2e5..a2b1b94e 100644
--- a/lib/connection.cpp
+++ b/lib/connection.cpp
@@ -281,7 +281,8 @@ void Connection::sync(int timeout)
void Connection::onSyncSuccess(SyncData &&data) {
d->data->setLastEvent(data.nextBatch());
- for (auto&& roomData: data.takeRoomData())
+ auto allRoomData = data.takeRoomData();
+ for (auto&& roomData: allRoomData)
{
const auto forgetIdx = d->roomIdsToForget.indexOf(roomData.roomId);
if (forgetIdx != -1)
@@ -302,7 +303,12 @@ void Connection::onSyncSuccess(SyncData &&data) {
r->updateData(std::move(roomData));
QCoreApplication::processEvents();
}
- for (auto&& accountEvent: data.takeAccountData())
+ // `for (auto&& accountEvent: data.takeAccountData())` doesn't work well
+ // with Clang on FreeBSD in Release configuration; it seems that
+ // the lifetime of the returned rvalue does not extend (violating the
+ // standard) and accountEvent refers to garbage in the loop body as a result.
+ auto allAccountData = data.takeAccountData();
+ for (auto&& accountEvent: allAccountData)
{
if (accountEvent->type() == EventType::DirectChat)
{