)]}'
{
  "commit": "d9b8448e5351433ab9cd5bb874fc013887bc0e0b",
  "tree": "21626d2403512d70615a95b65d8bde2cad645376",
  "parents": [
    "0965931a0a80aef1fe60339d7c070ad2d3ebff0f"
  ],
  "author": {
    "name": "Barret Rhoden",
    "email": "brho@cs.berkeley.edu",
    "time": "Tue Dec 19 18:12:48 2017 -0500"
  },
  "committer": {
    "name": "Barret Rhoden",
    "email": "brho@cs.berkeley.edu",
    "time": "Wed Dec 20 13:37:08 2017 -0500"
  },
  "message": "net: Make select() not spurious\n\nOur old select() was spurious - in the event there was some race, or even\nsome potential race, we\u0027d say that all of the FDs had some action.  For\ninstance, when we first added an FD to the epoll set, we could have missed\nan event: say it happened!  Or if we might have had another thread consume\nour event: say it happened!\n\nThis was OK for a while, but it break with non-blocking connect().  Calls\nlike read() and write() are often in a loop, so a spurious event isn\u0027t a\nbig deal.  But with connect(), once the app is told the connect is done,\nthey expect either completion or failure.\n\nOriginally, we never polled the FDs with fstat.  Over time, it turns out\nthat we needed to, such as for apps that call select() even though they\ndidn\u0027t drain them to empty (which would trigger an edge event later).  Now\nthat we have that polling method (fstat + appropriate support for\nreadable/writable bits) we can redo select such that we do not return\nspurious events.\n\nThis might be broken, especially for FDs on devices that don\u0027t support the\nnecessary stat bits.  So far, it\u0027s been working with sshd and port\nforwarding (which uses non-blocking connects).\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "3d3dce0e89a81c00365b1d511ee007eef2eb2d13",
      "old_mode": 33188,
      "old_path": "user/iplib/select.c",
      "new_id": "322d91a288db18c619c6e048e53319b04987f6af",
      "new_mode": 33188,
      "new_path": "user/iplib/select.c"
    }
  ]
}
