)]}'
{
  "commit": "f4cc537192cae225dc058af03d3b7cb45c9d8a7c",
  "tree": "32da98d0747284873f660657eb935ac9f2cf6dec",
  "parents": [
    "5c1d03d6302f3b02573bcbe4ffef1cc501a2cb57"
  ],
  "author": {
    "name": "Kyle Charbonneau",
    "email": "kylechar@google.com",
    "time": "Mon Jul 07 17:50:24 2025 -0700"
  },
  "committer": {
    "name": "Dawn LUCI CQ",
    "email": "dawn-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Mon Jul 07 17:50:24 2025 -0700"
  },
  "message": "Use vector to hold objects to destroy\n\nApiObjectList::Destroy() moved the objects it is going to destoy to a\ntemporary LinkedList. ApiObjectList::Untrack() returns true if the\nobject is in any list. If another thread runs\nApiObjectBase::DeleteThis() at the same time, that sees the objects are\nin a list and proceeds to remove it from list and then destroy it. This\ncan result in object being removed from list and having DestroyImpl()\ncalled on it twice.\n\nThis is fixed by using a std::vector to track the objects to destroy\ninstead. This avoids the double remove/destruction as\nApiObjectList::Destroy() removes all objects from the original list\nunder the lock.\n\nNote there is still a problem where the if the last reference is dropped\non another thread before ApiObjectList calls DestroyImpl(). The other\nthread will delete the object resulting in DestroyImpl() being a\nuse-after-free. That is going to fixed as a follow up.\n\nBug: 429112750, 396294899\nChange-Id: I9e8a809c653a1565d1dfbb4a7be48c91a644f540\nReviewed-on: https://dawn-review.googlesource.com/c/dawn/+/251094\nCommit-Queue: Kyle Charbonneau \u003ckylechar@google.com\u003e\nReviewed-by: Loko Kung \u003clokokung@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "fe2568c5b3d540386b12eb98bbddeaee5ad7b036",
      "old_mode": 33188,
      "old_path": "src/dawn/native/ObjectBase.cpp",
      "new_id": "0555c7f2485b2bddd6c6c1bbd5d40768d689a9f0",
      "new_mode": 33188,
      "new_path": "src/dawn/native/ObjectBase.cpp"
    }
  ]
}
