)]}'
{
  "commit": "1b435b10324fe9937f254bb00718f78d5e50837a",
  "tree": "dbde09a20acce19f528de2b0c156cae3bb708812",
  "parents": [
    "474ad834d2c2637a7e5df527f8a89e2792b572ef"
  ],
  "author": {
    "name": "aliguori",
    "email": "aliguori@c046a42c-6fe2-441c-8c8c-71466251a162",
    "time": "Fri Oct 31 17:24:21 2008 +0000"
  },
  "committer": {
    "name": "aliguori",
    "email": "aliguori@c046a42c-6fe2-441c-8c8c-71466251a162",
    "time": "Fri Oct 31 17:24:21 2008 +0000"
  },
  "message": "Make bottom halves more robust\n\nBottom halves are supposed to not complete until the next iteration of the main\nloop.  This is very important to ensure that guests can not cause stack\noverflows in the block driver code.  Right now, if you attempt to schedule a\nbottom half within a bottom half callback, you will enter an infinite loop.\n\nThis patch uses the same logic that we use for the IOHandler loop to make the\nbottom half processing robust in list manipulation while in a callback.\n\nThis patch also introduces idle scheduling for bottom halves.  qemu_bh_poll()\nreturns an indication of whether any bottom halves were successfully executed.\nqemu_aio_wait() uses this to immediately return if a bottom half was executed\ninstead of waiting for a completion notification.\n\nqemu_bh_schedule_idle() works around this by not reporting the callback has\nrun in the qemu_bh_poll loop.  qemu_aio_wait() probably needs some refactoring\nbut that would require a larger code audit.  idle scheduling seems like a good\ncompromise.\n\nSigned-off-by: Anthony Liguori \u003caliguori@us.ibm.com\u003e\n\n\n\n\ngit-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5572 c046a42c-6fe2-441c-8c8c-71466251a162\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "aca26746223e23b1aaa03c93b5fc8fd7d285921d",
      "old_mode": 33188,
      "old_path": "qemu-common.h",
      "new_id": "0c6f4de3f2297e8593557fef800f7226c968a452",
      "new_mode": 33188,
      "new_path": "qemu-common.h"
    },
    {
      "type": "modify",
      "old_id": "1afe36e6e9d31962ebf176cb612175f09aa0783f",
      "old_mode": 33188,
      "old_path": "vl.c",
      "new_id": "137074b9efc5d2e381664fb0b1fc87e1cce226c3",
      "new_mode": 33188,
      "new_path": "vl.c"
    }
  ]
}
