[Kernel] Clear object handles before release in ObjectTable::Reset
During bulk teardown, objects still had stale handle entries when Release() triggered their destructors, hitting the handles_.empty() assertion.
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user