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;