)]}'
{
  "commit": "9b34277d23a6fb15eb9513006c96d8026beeea1f",
  "tree": "f80c25a174a86df8393f0ef4e653d2b1d21cb376",
  "parents": [
    "f7311ccc630d925e7351e9440b7ad8bc6f0a51de"
  ],
  "author": {
    "name": "Stefan Hajnoczi",
    "email": "stefanha@redhat.com",
    "time": "Thu Mar 07 13:41:47 2013 +0100"
  },
  "committer": {
    "name": "Stefan Hajnoczi",
    "email": "stefanha@redhat.com",
    "time": "Fri Mar 15 16:07:50 2013 +0100"
  },
  "message": "aio: add a ThreadPool instance to AioContext\n\nThis patch adds a ThreadPool to AioContext.  It\u0027s possible that some\nAioContext instances will never use the ThreadPool, so defer creation\nuntil aio_get_thread_pool().\n\nThe reason why AioContext should have the ThreadPool is because the\nThreadPool is bound to a AioContext instance where the work item\u0027s\ncallback function is invoked.  It doesn\u0027t make sense to keep the\nThreadPool pointer anywhere other than AioContext.  For example,\nblock/raw-posix.c can get its AioContext\u0027s ThreadPool and submit work.\n\nSpecial note about headers: I used struct ThreadPool in aio.h because\nthere is a circular dependency if aio.h includes thread-pool.h.\n\nSigned-off-by: Stefan Hajnoczi \u003cstefanha@redhat.com\u003e\nReviewed-by: Paolo Bonzini \u003cpbonzini@redhat.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "f2d47ba96d1b8044eb565b1c3138a67301caae5e",
      "old_mode": 33188,
      "old_path": "async.c",
      "new_id": "90fe906539f70815a5cfbaa95b42fab9f11ce228",
      "new_mode": 33188,
      "new_path": "async.c"
    },
    {
      "type": "modify",
      "old_id": "5b54d383fcbabc517c8ba8cbadd71fca05127d80",
      "old_mode": 33188,
      "old_path": "include/block/aio.h",
      "new_id": "183679374fa5bbde66f0bde067fb74e618f8bdf0",
      "new_mode": 33188,
      "new_path": "include/block/aio.h"
    }
  ]
}
