)]}'
{
  "commit": "174b1d940ef25fcfe973c0b787554d4453680f71",
  "tree": "24a4ae6d664495bad75718473bdd69f8a9be1096",
  "parents": [
    "3d52724e735544f11140c65221c49753c8f73d2e"
  ],
  "author": {
    "name": "twerth",
    "email": "twerth@google.com",
    "time": "Mon Aug 24 06:39:58 2026 -0700"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Mon Aug 24 06:42:18 2026 -0700"
  },
  "message": "Fix underflow of remainingTasks in AbstractQueueVisitor upon interruption\n\nWhen Bazel is interrupted with Ctrl+C (SIGINT), forced teardown and cancellation in ForkJoinPool can cause decrementRemainingTasks() to be called multiple times for the same WrappedRunnable (between WrappedRunnable.run() and recordError() / cancellation callbacks).\nThis change adds an AtomicBoolean decremented flag to WrappedRunnable and introduces decrementRemainingTasksOnce() so that each task decrements remainingTasks at most once, preventing impossible negative number IllegalStateExceptions.\n\nFixes https://github.com/bazelbuild/bazel/issues/25686\n\nPiperOrigin-RevId: 969819582\nChange-Id: Ie915a12013a80e43c2177eda1f3a26a6f526f748\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "bcfb24efdfb9cc478731295c37404d944fc832a4",
      "old_mode": 33188,
      "old_path": "src/main/java/com/google/devtools/build/lib/concurrent/AbstractQueueVisitor.java",
      "new_id": "c405d56148e6b28e7f6fd3c2cee67d3a1d568df8",
      "new_mode": 33188,
      "new_path": "src/main/java/com/google/devtools/build/lib/concurrent/AbstractQueueVisitor.java"
    },
    {
      "type": "modify",
      "old_id": "0030c4dccdafb029aecba5d7007e14dee6dc1551",
      "old_mode": 33188,
      "old_path": "src/test/java/com/google/devtools/build/lib/concurrent/ForkJoinQuiescingExecutorTest.java",
      "new_id": "5bfd910945e5eb46a81eda11e8b814891d6467eb",
      "new_mode": 33188,
      "new_path": "src/test/java/com/google/devtools/build/lib/concurrent/ForkJoinQuiescingExecutorTest.java"
    }
  ]
}
