)]}'
{
  "commit": "801bf2e0d23b2145a190845d01db24f2ff4aa434",
  "tree": "30d2125f452a1513304f42d49fb6165693a499ad",
  "parents": [
    "03fa890a2e1206b4237ddb37fa7850fe1e85cfdd"
  ],
  "author": {
    "name": "yhirose",
    "email": "yuji.hirose.bug@gmail.com",
    "time": "Sun Oct 18 14:01:59 2026 -0400"
  },
  "committer": {
    "name": "yhirose",
    "email": "yuji.hirose.bug@gmail.com",
    "time": "Sun Oct 18 14:01:59 2026 -0400"
  },
  "message": "Let SSEClient::stop() interrupt a blocked read\n\nThe event loop reads through open_stream(), which takes the socket out\nof the Client, so the client_.stop() in stop() could not reach it.\nstop(), and the destructor with it, waited until the server sent\nsomething or the read timeout passed, 300 seconds by default.\n\nShutting the socket down from stop() does not wake a read waiting in\nWSAPoll on Windows, so 3744227 was reverted. A stream now takes an\ninterrupt check instead: while one is set, it waits for data in 100 ms\nslices and gives up once the check returns true, as the server\u0027s\nkeep-alive wait does with its flag. SSEClient sets one that turns true\nwhen stop() is called. Streams without one wait as before.\n\nSSEIntegrationTest.ManualStop now ends its stream with the fixture\u0027s\nflag. Its server outlives the test body, and the faster stop() let the\nstream read a local of the body that had returned.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "6ad8d1b5e86bed82726cdc292911195d02fb7c96",
      "old_mode": 33188,
      "old_path": "httplib.h",
      "new_id": "2c709d529312707198ca2caf2728e14802868203",
      "new_mode": 33188,
      "new_path": "httplib.h"
    },
    {
      "type": "modify",
      "old_id": "40c7dd1d9b65853084d331c1876c64899f36efb7",
      "old_mode": 33188,
      "old_path": "test/test.cc",
      "new_id": "75c9c80fcd236c2765c4cde8301246c80e7e9895",
      "new_mode": 33188,
      "new_path": "test/test.cc"
    }
  ]
}
