diff --git a/rpcs3/rpcs3qt/save_manager_dialog.cpp b/rpcs3/rpcs3qt/save_manager_dialog.cpp index 24bb3b66a0..1d55263b24 100644 --- a/rpcs3/rpcs3qt/save_manager_dialog.cpp +++ b/rpcs3/rpcs3qt/save_manager_dialog.cpp @@ -273,7 +273,8 @@ void save_manager_dialog::UpdateList() return icon; }; - const QList icons = QtConcurrent::blockingMapped>(indices, get_icon); + // NOTE: Due to a Qt bug in Qt 5.15.2, QtConcurrent::blockingMapped has a high risk of deadlocking. So let's just use QtConcurrent::mapped. + const QList icons = QtConcurrent::mapped(indices, get_icon).results(); for (int i = 0; i < icons.count(); ++i) { @@ -370,7 +371,8 @@ void save_manager_dialog::UpdateIcons() return GetResizedIcon(i); }; - QList scaled = QtConcurrent::blockingMapped>(indices, get_scaled); + // NOTE: Due to a Qt bug in Qt 5.15.2, QtConcurrent::blockingMapped has a high risk of deadlocking. So let's just use QtConcurrent::mapped. + const QList scaled = QtConcurrent::mapped(indices, get_scaled).results(); for (int i = 0; i < m_list->rowCount() && i < scaled.count(); ++i) { diff --git a/rpcs3/rpcs3qt/trophy_manager_dialog.cpp b/rpcs3/rpcs3qt/trophy_manager_dialog.cpp index 457a7b42bf..1db004cea8 100644 --- a/rpcs3/rpcs3qt/trophy_manager_dialog.cpp +++ b/rpcs3/rpcs3qt/trophy_manager_dialog.cpp @@ -513,7 +513,8 @@ void trophy_manager_dialog::ResizeGameIcons() return GetResizedGameIcon(i); }; - QList scaled = QtConcurrent::blockingMapped>(indices, get_scaled); + // NOTE: Due to a Qt bug in Qt 5.15.2, QtConcurrent::blockingMapped has a high risk of deadlocking. So let's just use QtConcurrent::mapped. + const QList scaled = QtConcurrent::mapped(indices, get_scaled).results(); for (int i = 0; i < m_game_table->rowCount() && i < scaled.count(); ++i) { @@ -578,17 +579,14 @@ void trophy_manager_dialog::ResizeTrophyIcons() }; - // NOTE: Due to a Qt bug, QtConcurrent::blockingMapped has a high risk of deadlocking - // during the QPixmap operations in get_scaled. So let's just use QtConcurrent::mapped. - QFutureWatcher watcher; - watcher.setFuture(QtConcurrent::mapped(trophy_ids, get_scaled)); - watcher.waitForFinished(); + // NOTE: Due to a Qt bug in Qt 5.15.2, QtConcurrent::blockingMapped has a high risk of deadlocking. So let's just use QtConcurrent::mapped. + const QList scaled = QtConcurrent::mapped(trophy_ids, get_scaled).results(); - for (int i = 0; i < m_trophy_table->rowCount() && i < watcher.future().resultCount(); ++i) + for (int i = 0; i < m_trophy_table->rowCount() && i < scaled.count(); ++i) { QTableWidgetItem* icon_item = m_trophy_table->item(i, TrophyColumns::Icon); if (icon_item) - icon_item->setData(Qt::DecorationRole, watcher.future().resultAt(i)); + icon_item->setData(Qt::DecorationRole, scaled.at(i)); } ReadjustTrophyTable(); @@ -747,7 +745,8 @@ void trophy_manager_dialog::PopulateGameTable() return icon; }; - QList icons = QtConcurrent::blockingMapped>(indices, get_icon); + // NOTE: Due to a Qt bug in Qt 5.15.2, QtConcurrent::blockingMapped has a high risk of deadlocking. So let's just use QtConcurrent::mapped. + const QList icons = QtConcurrent::mapped(indices, get_icon).results(); for (int i = 0; i < indices.count(); ++i) {