aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/connection.cpp10
-rw-r--r--lib/events/directchatevent.cpp11
2 files changed, 11 insertions, 10 deletions
diff --git a/lib/connection.cpp b/lib/connection.cpp
index 9d0a34f3..71ada8f7 100644
--- a/lib/connection.cpp
+++ b/lib/connection.cpp
@@ -281,8 +281,7 @@ void Connection::sync(int timeout)
void Connection::onSyncSuccess(SyncData &&data) {
d->data->setLastEvent(data.nextBatch());
- auto allRoomData = data.takeRoomData();
- for (auto&& roomData: allRoomData)
+ for (auto&& roomData: data.takeRoomData())
{
const auto forgetIdx = d->roomIdsToForget.indexOf(roomData.roomId);
if (forgetIdx != -1)
@@ -303,12 +302,7 @@ void Connection::onSyncSuccess(SyncData &&data) {
r->updateData(std::move(roomData));
QCoreApplication::processEvents();
}
- // `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)
+ for (auto&& accountEvent: data.takeAccountData())
{
if (accountEvent->type() == EventType::DirectChat)
{
diff --git a/lib/events/directchatevent.cpp b/lib/events/directchatevent.cpp
index 7049d967..63d638a3 100644
--- a/lib/events/directchatevent.cpp
+++ b/lib/events/directchatevent.cpp
@@ -29,8 +29,15 @@ DirectChatEvent::DirectChatEvent(const QJsonObject& obj)
QMultiHash<QString, QString> DirectChatEvent::usersToDirectChats() const
{
QMultiHash<QString, QString> result;
- for (auto it = contentJson().begin(); it != contentJson().end(); ++it)
- for (auto roomIdValue: it.value().toArray())
+ const auto json = contentJson();
+ for (auto it = json.begin(); it != json.end(); ++it)
+ {
+ // Beware of range-for's over temporary returned from temporary
+ // (see the bottom of
+ // http://en.cppreference.com/w/cpp/language/range-for#Explanation)
+ const auto roomIds = it.value().toArray();
+ for (const auto& roomIdValue: roomIds)
result.insert(it.key(), roomIdValue.toString());
+ }
return result;
}