Releases the lock on ApiObjectList before calling DestroyImpl.
Bug: dawn:1984
Change-Id: I9e0b5ac58037fa568d46f6a77110f4d8c13674d9
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/147702
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Loko Kung <lokokung@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
diff --git a/src/dawn/native/ObjectBase.cpp b/src/dawn/native/ObjectBase.cpp
index 996424b..991ac0d 100644
--- a/src/dawn/native/ObjectBase.cpp
+++ b/src/dawn/native/ObjectBase.cpp
@@ -55,10 +55,15 @@
}
void ApiObjectList::Destroy() {
- std::lock_guard<std::mutex> lock(mMutex);
- mMarkedDestroyed = true;
- while (!mObjects.empty()) {
- auto* head = mObjects.head();
+ LinkedList<ApiObjectBase> objects;
+ {
+ std::lock_guard<std::mutex> lock(mMutex);
+ mMarkedDestroyed = true;
+ mObjects.MoveInto(&objects);
+ }
+
+ while (!objects.empty()) {
+ auto* head = objects.head();
bool removed = head->RemoveFromList();
ASSERT(removed);
head->value()->DestroyImpl();