30 lines
990 B
Diff
30 lines
990 B
Diff
# UNDF: UNDF-2026-000001179
|
|
--- a/src/xenia/kernel/util/object_table.cc
|
|
+++ b/src/xenia/kernel/util/object_table.cc
|
|
@@ -9,6 +9,7 @@
|
|
|
|
#include "xenia/kernel/util/object_table.h"
|
|
|
|
+#include <unordered_set>
|
|
#include <algorithm>
|
|
#include <cstring>
|
|
|
|
@@ -219,13 +220,15 @@ std::vector<object_ref<XObject>> ObjectTable::GetAllObjects() {
|
|
std::vector<object_ref<XObject>> ObjectTable::GetAllObjects() {
|
|
auto lock = global_critical_region_.Acquire();
|
|
std::vector<object_ref<XObject>> results;
|
|
+ std::unordered_set<XObject*> seen;
|
|
|
|
for (uint32_t slot = 0; slot < table_capacity_; slot++) {
|
|
auto& entry = table_[slot];
|
|
- if (entry.object && std::find(results.begin(), results.end(),
|
|
- entry.object) == results.end()) {
|
|
+ if (entry.object && seen.find(entry.object) == seen.end()) {
|
|
+ seen.insert(entry.object);
|
|
entry.object->Retain();
|
|
results.push_back(object_ref<XObject>(entry.object));
|
|
}
|
|
}
|
|
|
|
return results;
|
|
}
|