)]}'
{
  "commit": "b51c743e4210756a98f4f60c69a34745e4b27a55",
  "tree": "7a7a0cb715daa2df22aeba82a805c7e63a455c76",
  "parents": [
    "08e0029f105de993d798ea902827ae2efe7798a8"
  ],
  "author": {
    "name": "Chris Dickens",
    "email": "christopher.a.dickens@gmail.com",
    "time": "Fri Jan 15 17:18:34 2021 -0800"
  },
  "committer": {
    "name": "Chris Dickens",
    "email": "christopher.a.dickens@gmail.com",
    "time": "Fri Jan 15 17:18:34 2021 -0800"
  },
  "message": "Windows: Filter out non-libusb I/O completions\n\nThe I/O completion port thread gets notified of every I/O operation that\ncompletes for a given HANDLE, but not all I/O operations originate from\nwithin libusb. For example, libusbK performs a number of I/O control\ncalls during initialization and specific device operations, such as\nsetting an interface alternate setting. These non-libusb operations need\nto be ignored as the OVERLAPPED associated with such operations is not\ntied to a libusb_transfer structure.\n\nResolve this situation by using the libusb device handle as the I/O\ncompletion port\u0027s unique key and keeping a list of active transfers for\neach device handle. When the I/O competion port thread is notified of an\nI/O completion, it will first match the OVERLAPPED to an outstanding\ntransfer before acting on it.\n\nCloses #844\n\nSigned-off-by: Chris Dickens \u003cchristopher.a.dickens@gmail.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "efb746b3f9af10baf32d3dbb5e66b748f22d883d",
      "old_mode": 33188,
      "old_path": "libusb/os/windows_common.c",
      "new_id": "a5e2a7cbc9297410b67881c70a95a6113ee3184f",
      "new_mode": 33188,
      "new_path": "libusb/os/windows_common.c"
    },
    {
      "type": "modify",
      "old_id": "d9958c62d65f8055db3b96966984f1549878dc42",
      "old_mode": 33188,
      "old_path": "libusb/os/windows_common.h",
      "new_id": "c84f1f9f70429430e9bae90d447a53c245a47997",
      "new_mode": 33188,
      "new_path": "libusb/os/windows_common.h"
    },
    {
      "type": "modify",
      "old_id": "76aba16b898a40146d0395b866ff18d2331a1ea6",
      "old_mode": 33188,
      "old_path": "libusb/os/windows_usbdk.c",
      "new_id": "9f52b486c96b494571add88f953461d3ea818a68",
      "new_mode": 33188,
      "new_path": "libusb/os/windows_usbdk.c"
    },
    {
      "type": "modify",
      "old_id": "ea510382812907c2da14a751c3f10c24857fd825",
      "old_mode": 33188,
      "old_path": "libusb/os/windows_winusb.c",
      "new_id": "a370ede229938e6dfcd80b614bda0dd6cd60abe0",
      "new_mode": 33188,
      "new_path": "libusb/os/windows_winusb.c"
    },
    {
      "type": "modify",
      "old_id": "b8e72d6086ae8ddeb68affe35b82c68a05f3f1c4",
      "old_mode": 33188,
      "old_path": "libusb/version_nano.h",
      "new_id": "4227ce9731ac5a8468e41f6bce54fb65dcecf752",
      "new_mode": 33188,
      "new_path": "libusb/version_nano.h"
    }
  ]
}
