)]}'
{
  "commit": "696b94b5eddb90ced4bf28762edf2f1db291a8bb",
  "tree": "bf9107ba9a92e8321c384024f281682fe1da94c1",
  "parents": [
    "801bf2e0d23b2145a190845d01db24f2ff4aa434"
  ],
  "author": {
    "name": "yhirose",
    "email": "yuji.hirose.bug@gmail.com",
    "time": "Sun Oct 18 17:23:05 2026 -0400"
  },
  "committer": {
    "name": "yhirose",
    "email": "yuji.hirose.bug@gmail.com",
    "time": "Sun Oct 18 17:23:05 2026 -0400"
  },
  "message": "Wake a WebSocket read on a pong timeout on every platform\n\nWhen max_missed_pongs ran out, the heartbeat thread shut down the read\nside of the socket to end a read() blocked on the silent peer. On\nWindows that does not wake the wait, so read() stayed blocked until its\nread timeout and then returned Timeout. The heartbeat test never ran on\nWindows, so CI did not catch it.\n\nThe heartbeat now sets a flag that the stream\u0027s read interrupt checks,\nthe mechanism SSEClient::stop() uses, and WebSocketSSLStream takes the\ninterrupt too. It is set only when a pong timeout can happen, so other\nconnections wait as before. read() reports a timeout on a connection\nthat has closed as Fail, since Timeout means it is still usable.\n\nBuild and run the heartbeat test in the Windows jobs, and add a TLS\npong timeout test.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "ba7cc50f434b5a15542f13fb07beb8180517b919",
      "old_mode": 33188,
      "old_path": ".github/workflows/test.yaml",
      "new_id": "93fbf7588bfa311e75fa74495d384d09b477f98b",
      "new_mode": 33188,
      "new_path": ".github/workflows/test.yaml"
    },
    {
      "type": "modify",
      "old_id": "2c709d529312707198ca2caf2728e14802868203",
      "old_mode": 33188,
      "old_path": "httplib.h",
      "new_id": "c2d46ff234740dc310bfe9a65184eb23946a11ec",
      "new_mode": 33188,
      "new_path": "httplib.h"
    },
    {
      "type": "modify",
      "old_id": "63b96ab3fc3dac92c9e1978b2ba9b7ce77e897cb",
      "old_mode": 33188,
      "old_path": "test/CMakeLists.txt",
      "new_id": "1ae9cdb664a6deb1809173eed97a7a127d90b14e",
      "new_mode": 33188,
      "new_path": "test/CMakeLists.txt"
    },
    {
      "type": "modify",
      "old_id": "4242a4959ebd1f3c7584d9524993df0a2b9d88af",
      "old_mode": 33188,
      "old_path": "test/test_websocket_heartbeat.cc",
      "new_id": "45646fb4574697574525ab4bb51fe02bc55ca0f9",
      "new_mode": 33188,
      "new_path": "test/test_websocket_heartbeat.cc"
    }
  ]
}
