)]}'
{
  "commit": "0dca45a31855f628ae66aa3d1b23d6e8790177c8",
  "tree": "ce9575526a69e6ff243f31457b5825271429d7e8",
  "parents": [
    "e0b5919a1c69d4db2a44deed40b20e1f36f03c17"
  ],
  "author": {
    "name": "Ben Vanik",
    "email": "ben.vanik@gmail.com",
    "time": "Tue Feb 24 19:56:12 2026 -0800"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Tue Feb 24 19:56:12 2026 -0800"
  },
  "message": "[Async] Fix multishot CTS test flakes: use blocking waits for completions (#23577)\n\nMaybe this time? The advantage of the crappy gh runners is that they do\nexpose very particular timing issues, I suppose.\n\nDrainPending uses immediate (0ms) timeout and breaks on the first empty\npoll — designed for draining backlogs, not waiting for future events.\nSends complete eagerly via writev at submit time, so PollUntil during\nthe send loop is satisfied by send completions alone. The recv may not\nhave been processed by the poll thread yet when DrainPending runs, and\nit immediately gives up.\n\nReplace DrainPending with blocking PollUntil loops that wait until the\nexpected completions actually arrive, matching the pattern already used\nin MultishotAccept_ListenerClose and MultishotRecv_ConnectionClose.\n\nCo-authored-by: Claude \u003cnoreply@anthropic.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "c8d955a328bdda52f72c1cefd01b6b91f661011f",
      "old_mode": 33188,
      "old_path": "runtime/src/iree/async/cts/socket/multishot_test.cc",
      "new_id": "3e2a18c1d431ae5bd407617c2cfa14ad74821033",
      "new_mode": 33188,
      "new_path": "runtime/src/iree/async/cts/socket/multishot_test.cc"
    }
  ]
}
