)]}'
{
  "commit": "cce154b3cf0b0fb56a28c3b19a8931d23ab66397",
  "tree": "9dcfcc0899b56d494345fbb8b3fab6c296e4a458",
  "parents": [
    "ca649d15535a6029697b6c339590bd155fa6528f"
  ],
  "author": {
    "name": "Todd Lipcon",
    "email": "tlipcon@google.com",
    "time": "Fri Oct 16 12:20:34 2026 -0700"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Fri Oct 16 12:27:50 2026 -0700"
  },
  "message": "DCHECK that a Mutex is not locked when destroyed\n\nDestroying a locked Mutex is undefined behavior and is already flagged by\nThreadSanitizer via `ABSL_TSAN_MUTEX_DESTROY`. Previously, non-TSan debug builds\ntolerated it and called `ForgetDeadlockInfo()`, which left stale entries in the\nholding thread\u0027s `SynchLocksHeld` list (filling all 40 slots in\n`Mutex.LockedMutexDestructionBug` and disabling deadlock detection on that\nthread for the rest of the process).\n\nIn debug builds (`!defined(NDEBUG)`), `Mutex::Dtor()` now `ABSL_RAW_DCHECK`s\nthat the `Mutex` is not held in exclusive or shared mode when destroyed.\n`Mutex.LockedMutexDestructionBug` and `Mutex.DeadlockIdBug` are replaced with\n`Mutex.LockedMutexDestructionDeathTest`.\n\nPiperOrigin-RevId: 1001021469\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d6e2aace10c7f0cb7fffad116bc9ade8a72f5544",
      "old_mode": 33188,
      "old_path": "absl/synchronization/mutex.cc",
      "new_id": "0286198534526d923035aa828e41944975c40240",
      "new_mode": 33188,
      "new_path": "absl/synchronization/mutex.cc"
    },
    {
      "type": "modify",
      "old_id": "a96bcff7ebf8414f0b25c00b47b1f65c643fc3a1",
      "old_mode": 33188,
      "old_path": "absl/synchronization/mutex_test.cc",
      "new_id": "e71fa903783480884c5ff5b33422773a0a55ac37",
      "new_mode": 33188,
      "new_path": "absl/synchronization/mutex_test.cc"
    }
  ]
}
