)]}'
{
  "commit": "667b6b022afb8c4b0caece2b105b15ffee290cba",
  "tree": "380fa1e3c71d6cf961bc98d1915eddbb26bedf94",
  "parents": [
    "2613b6244bc8987bc9937a0635fce8820df5ff61"
  ],
  "author": {
    "name": "Geoff Maddox",
    "email": "gmaddox@lucidchart.com",
    "time": "Tue Sep 04 04:45:00 2018 -0700"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-piper@google.com",
    "time": "Tue Sep 04 04:47:04 2018 -0700"
  },
  "message": "Fix race condition with releaseUploadChannel().\n\nA race condition can occur in `HttpBlobStore.releaseUploadChannel()` when `ChannelHandlerContext` is closed by `HttpUploadHandler.channelRead0`. Because `ChannelHandlerContext.close` runs asynchronously and closes all pipelines in reverse order (before the channel is marked as closed), `HttpBlobStore.releaseUploadChannel()` can be executed while channel is still open and handlers are being removed, causing an exception to be thrown by the `ch.pipeline().remove(X)` calls. This fix saves the status of the keepAlive response from the `HttpUploadHandler` so that the channel can be fully closed before releasing.\n\nResolves #5952\n\nCloses #5953.\n\nPiperOrigin-RevId: 211437717\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "ca9a8ebff470124c22880fb699f670183e37477a",
      "old_mode": 33188,
      "old_path": "src/main/java/com/google/devtools/build/lib/remote/blobstore/http/HttpBlobStore.java",
      "new_id": "a1ec3b2c7aef698755d258f1f4e7f32ecacca11e",
      "new_mode": 33188,
      "new_path": "src/main/java/com/google/devtools/build/lib/remote/blobstore/http/HttpBlobStore.java"
    }
  ]
}
