Remove DanglingUntriaged in BuddyAllocator
Bug: dawn:2349
Test: dawn_unittests
Change-Id: I51a6939f917612116c14bf7f55dedfac7f85c740
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/177241
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
diff --git a/src/dawn/native/BuddyAllocator.cpp b/src/dawn/native/BuddyAllocator.cpp
index 3a87761..3c02f59 100644
--- a/src/dawn/native/BuddyAllocator.cpp
+++ b/src/dawn/native/BuddyAllocator.cpp
@@ -44,7 +44,9 @@
BuddyAllocator::~BuddyAllocator() {
if (mRoot) {
- DeleteBlock(mRoot);
+ mFreeLists.clear();
+
+ DeleteBlock(mRoot.ExtractAsDangling());
}
}
@@ -248,7 +250,7 @@
// The buddies were inserted in a specific order but
// could be deleted in any order.
- DeleteBlock(curr->pBuddy);
+ DeleteBlock(curr->pBuddy.ExtractAsDangling());
DeleteBlock(curr);
// Parent is now free.
@@ -268,7 +270,7 @@
if (block->mState == BlockState::Split) {
// Delete the pair in same order we inserted.
- DeleteBlock(block->split.pLeft->pBuddy);
+ DeleteBlock(block->split.pLeft->pBuddy.ExtractAsDangling());
DeleteBlock(block->split.pLeft);
}
delete block;
diff --git a/src/dawn/native/BuddyAllocator.h b/src/dawn/native/BuddyAllocator.h
index c9d4491..affa41f 100644
--- a/src/dawn/native/BuddyAllocator.h
+++ b/src/dawn/native/BuddyAllocator.h
@@ -80,10 +80,8 @@
// Pointer to this block's buddy, iff parent is split.
// Used to quickly merge buddy blocks upon de-allocate.
- // TODO(https://crbug.com/dawn/2349): Investigate DanglingUntriaged in dawn/native.
- raw_ptr<BuddyBlock, DanglingUntriaged> pBuddy = nullptr;
- // TODO(https://crbug.com/dawn/2349): Investigate DanglingUntriaged in dawn/native.
- raw_ptr<BuddyBlock, DanglingUntriaged> pParent = nullptr;
+ raw_ptr<BuddyBlock> pBuddy = nullptr;
+ raw_ptr<BuddyBlock> pParent = nullptr;
// Track whether this block has been split or not.
BlockState mState;
@@ -116,13 +114,11 @@
// Keep track the head and tail (for faster insertion/removal).
struct BlockList {
- // TODO(https://crbug.com/dawn/2349): Investigate DanglingUntriaged in dawn/native.
- raw_ptr<BuddyBlock, DanglingUntriaged> head = nullptr; // First free block in level.
+ raw_ptr<BuddyBlock> head = nullptr; // First free block in level.
// TODO(crbug.com/dawn/827): Track the tail.
};
- // TODO(https://crbug.com/dawn/2349): Investigate DanglingUntriaged in dawn/native.
- raw_ptr<BuddyBlock, DanglingUntriaged> mRoot = nullptr; // Used to deallocate non-free blocks.
+ raw_ptr<BuddyBlock> mRoot = nullptr; // Used to deallocate non-free blocks.
uint64_t mMaxBlockSize = 0;