)]}'
{
  "commit": "9d9b1c9860d7779a76df42866ed146bfac861649",
  "tree": "a4d83d973dc3111823c728e119bd9ab705f90c1d",
  "parents": [
    "4f5d5054d09d98b823556988bd1690ec3a4bee5e"
  ],
  "author": {
    "name": "Michael Spang",
    "email": "spang@chromium.org",
    "time": "Thu Apr 09 15:07:40 2015"
  },
  "committer": {
    "name": "Matthew Yuan",
    "email": "matthewyuan@chromium.org",
    "time": "Fri Apr 10 00:54:16 2015"
  },
  "message": "Make EvdevRead() return errors to the caller\n\nErrors during read() in EvdevRead() are not passed back to the caller.\nThis is problematic for level-triggered IO polling, because permanent\nerrors (such as device removal) are not detected and we will continue to\npoll the device forever without handling the error.\n\nThis manifests itself as the device polling thread spinning, and non-IO\ntasks (device hotplug, feedback collection) do not make progress because\nMessagePumpLibevent never yields until there\u0027s no work to do.\n\nxf86-input-cmt expects errno values to be returned from EvdevRead() (even\nthough it wasn\u0027t doing so), so return the errno value upon failure.\nTemporary errors still return success; otherwise we also need to patch\nthe call site.\n\nBUG\u003dchromium:475132,chrome-os-partner:38908,chrome-os-partner:38562\nTEST\u003dChange chrome to delay unplug events to make the bug reproduce\n     easily, then remove a mouse from the system. Without fix, device\n     thread spins at 100% CPU and hotplug stops making progress. With\n     fix, the error is detected and the libevent watcher gets cancelled.\n\nChange-Id: I5c968c89f8bed72ba48124313136605754599c88\nReviewed-on: https://chromium-review.googlesource.com/264980\nReviewed-by: Kevin Schoedel \u003ckpschoedel@chromium.org\u003e\nReviewed-by: Alex Sakhartchouk \u003calexst@chromium.org\u003e\nTested-by: Michael Spang \u003cspang@chromium.org\u003e\nCommit-Queue: Matthew Yuan \u003cmatthewyuan@chromium.org\u003e\n(cherry picked from commit 61f882f395b9f39478d7164209e7134cccdcb72b)\nReviewed-on: https://chromium-review.googlesource.com/265084\nReviewed-by: Matthew Yuan \u003cmatthewyuan@chromium.org\u003e\nTested-by: Matthew Yuan \u003cmatthewyuan@chromium.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "589cb28fd2f7c947ef53c34f3e4a813432ec00ea",
      "old_mode": 33188,
      "old_path": "src/libevdev.c",
      "new_id": "e920a026443907740c90bd6de49e482d92987730",
      "new_mode": 33188,
      "new_path": "src/libevdev.c"
    }
  ]
}
