)]}'
{
  "commit": "bb4170df2e7fbff9e55745d7110b419f6f1ba4ba",
  "tree": "b1f221b42d4a1284ef61761a9dd9ed3b0d4efc15",
  "parents": [
    "cbb1563acf067943d2205ed46f55aa7417eb7179"
  ],
  "author": {
    "name": "Tommi",
    "email": "tommi@webrtc.org",
    "time": "Mon Jun 08 13:34:24 2026"
  },
  "committer": {
    "name": "webrtc-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "email": "webrtc-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Mon Jun 08 15:33:51 2026"
  },
  "message": "Handle possible deadlocks and hangs during PeerConnection teardown\n\nAddress two issues related to thread shutdown and teardown when the\ntarget thread (network/worker) has been instructed to quit before the\nPeerConnection destruction has completed:\n\n1. In ScopedOperationsBatcher::Run(), if the target thread drops tasks\n(e.g., because it is quitting), the loop would previously run infinitely\nbecause task_idx did not advance. We now detect this by verifying that\ntask_idx has progressed after the BlockingCall, and abort if it has not.\n\n2. In MethodCall::Marshal and ConstMethodCall::Marshal, if the target\nthread drops the task because it is quitting, the calling thread would\npreviously hang forever because event_.Set() was never called. We now\nuse absl::Cleanup to ensure the event is set on task destruction.\n\nBug: b/515407473\nChange-Id: Iea8ec32b6a9e9850983ed563db07b5c386ad834d\nReviewed-on: https://webrtc-review.googlesource.com/c/src/+/479140\nReviewed-by: Danil Chapovalov \u003cdanilchap@webrtc.org\u003e\nCommit-Queue: Tomas Gunnarsson \u003ctommi@webrtc.org\u003e\nCr-Commit-Position: refs/heads/main@{#47930}\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "46ddb0adc1078d1509d5d6eb1d3297b2da18c27c",
      "old_mode": 33188,
      "old_path": "pc/BUILD.gn",
      "new_id": "b42faa8ba5fe964553777a60cdea4a5049c7bb30",
      "new_mode": 33188,
      "new_path": "pc/BUILD.gn"
    },
    {
      "type": "modify",
      "old_id": "7adcdd9781a9540dc72f5febdc75146f2f265b13",
      "old_mode": 33188,
      "old_path": "pc/proxy.h",
      "new_id": "dfcf77cb38fe675f71bfa091cc016e027c31463f",
      "new_mode": 33188,
      "new_path": "pc/proxy.h"
    },
    {
      "type": "modify",
      "old_id": "d3d3739aa909fe83c5df711732dc791a89b8f65a",
      "old_mode": 33188,
      "old_path": "pc/proxy_unittest.cc",
      "new_id": "589b50f08226837aad6c43758f27986a59788a87",
      "new_mode": 33188,
      "new_path": "pc/proxy_unittest.cc"
    },
    {
      "type": "modify",
      "old_id": "61fa47fba587e1300e49c7d76f8ab3eb50bb6149",
      "old_mode": 33188,
      "old_path": "pc/scoped_operations_batcher.cc",
      "new_id": "15b25fc96a4d92c8f1b9d1c0e45c11918f18e9fb",
      "new_mode": 33188,
      "new_path": "pc/scoped_operations_batcher.cc"
    },
    {
      "type": "modify",
      "old_id": "ad9d033c1c2b875d79c9093c3a1f730dab64c859",
      "old_mode": 33188,
      "old_path": "pc/scoped_operations_batcher_unittest.cc",
      "new_id": "5d8d5ea2370b3913e243c456c020e43e9fb52a78",
      "new_mode": 33188,
      "new_path": "pc/scoped_operations_batcher_unittest.cc"
    }
  ]
}
