)]}'
{
  "commit": "56ca6ee237a7950718073bfc33a0190712b17006",
  "tree": "828998b52a73c9d28969b2490d4df4a5eec8deb5",
  "parents": [
    "a68d0aabb5ac9d0c866f134cf933c30f0ada34c3"
  ],
  "author": {
    "name": "ericorth",
    "email": "ericorth@google.com",
    "time": "Thu Aug 06 16:13:03 2026 -0700"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Thu Aug 06 16:13:45 2026 -0700"
  },
  "message": "QBONE TUN exchanger async refactor: Make exchanger start/stop more explicit\n\nNeeded to ensure clean interactions with starting/stopping off-thread writes.\n\nAlso, now more explicitly a bug to call read/write without a valid socket, rather than being treated as a read/write error, but in a quick look through our code, I don\u0027t think we ever try to do read/writes if socket setup fails. Necessary mostly so I can consistently promise the Visitor won\u0027t receive callbacks after Stop().\n\nPiperOrigin-RevId: 960557539\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "11db1c13e37ffea85a0f26acc3e96b54f451a984",
      "old_mode": 33188,
      "old_path": "quiche/quic/qbone/bonnet/mock_qbone_client_packet_exchanger.h",
      "new_id": "d42ab2c4b31f84d8f5c7f00817a0eab97b74b800",
      "new_mode": 33188,
      "new_path": "quiche/quic/qbone/bonnet/mock_qbone_client_packet_exchanger.h"
    },
    {
      "type": "modify",
      "old_id": "27862b168bf81f75d4d3a1d1cdccfa1c02b4f14f",
      "old_mode": 33188,
      "old_path": "quiche/quic/qbone/bonnet/qbone_client_packet_exchanger.h",
      "new_id": "c88b48d29e3578a787ae196956ecb35d8117ddcb",
      "new_mode": 33188,
      "new_path": "quiche/quic/qbone/bonnet/qbone_client_packet_exchanger.h"
    },
    {
      "type": "modify",
      "old_id": "ccb2770b642b0ebc1315dfe1fa8982bb288e5e94",
      "old_mode": 33188,
      "old_path": "quiche/quic/qbone/bonnet/tun_device_packet_exchanger.cc",
      "new_id": "8489b3ec4ce4dd2e40ea8395024cf25757ca6f8b",
      "new_mode": 33188,
      "new_path": "quiche/quic/qbone/bonnet/tun_device_packet_exchanger.cc"
    },
    {
      "type": "modify",
      "old_id": "0ad7bbf5ec50adf753aff1450c523589e3a85683",
      "old_mode": 33188,
      "old_path": "quiche/quic/qbone/bonnet/tun_device_packet_exchanger.h",
      "new_id": "19b03d5ef6f02b606b8f83a208c18e83ec96555d",
      "new_mode": 33188,
      "new_path": "quiche/quic/qbone/bonnet/tun_device_packet_exchanger.h"
    },
    {
      "type": "modify",
      "old_id": "6102d65a5c72679387d5a339562bf2aee28ec85e",
      "old_mode": 33188,
      "old_path": "quiche/quic/qbone/bonnet/tun_device_packet_exchanger_test.cc",
      "new_id": "cecca0a2e7dd09417bb0bbc05baa69ebf83058c6",
      "new_mode": 33188,
      "new_path": "quiche/quic/qbone/bonnet/tun_device_packet_exchanger_test.cc"
    }
  ]
}
