diff --git a/src/xenia/kernel/util/object_table.cc b/src/xenia/kernel/util/object_table.cc index fa06cb4c1..4e6dc1b65 100644 --- a/src/xenia/kernel/util/object_table.cc +++ b/src/xenia/kernel/util/object_table.cc @@ -25,16 +25,21 @@ ObjectTable::~ObjectTable() { Reset(); } void ObjectTable::Reset() { auto global_lock = global_critical_region_.Acquire(); - // Release all objects. + // Release all objects, clearing their handles first so destructors + // don't assert on non-empty handles_. for (uint32_t n = 0; n < table_capacity_; n++) { ObjectTableEntry& entry = table_[n]; if (entry.object) { + entry.object->handles().clear(); + entry.handle_ref_count = 0; entry.object->Release(); } } for (uint32_t n = 0; n < host_table_capacity_; n++) { ObjectTableEntry& entry = host_table_[n]; if (entry.object) { + entry.object->handles().clear(); + entry.handle_ref_count = 0; entry.object->Release(); } }