)]}'
{
  "commit": "dea97c1fbd4e1bc36d776ff949ce568b7a435e71",
  "tree": "615c2748695fcaac496078ee5ac16f4aac7d975e",
  "parents": [
    "aa9bbd865502ed517624ab6fe7d4b5d89ca95e43"
  ],
  "author": {
    "name": "Kevin Wolf",
    "email": "kwolf@redhat.com",
    "time": "Thu May 25 14:47:02 2023 +0200"
  },
  "committer": {
    "name": "Kevin Wolf",
    "email": "kwolf@redhat.com",
    "time": "Tue May 30 17:21:23 2023 +0200"
  },
  "message": "block-coroutine-wrapper: Take AioContext lock in no_co_wrappers\n\nAll of the functions that currently take a BlockDriverState, BdrvChild\nor BlockBackend as their first parameter expect the associated\nAioContext to be locked when they are called. In the case of\nno_co_wrappers, they are called from bottom halves directly in the main\nloop, so no other caller can be expected to take the lock for them. This\ncan result in assertion failures because a lock that isn\u0027t taken is\nreleased in nested event loops.\n\nLooking at the first parameter is already done by co_wrappers to decide\nwhere the coroutine should run, so doing the same in no_co_wrappers is\nonly consistent. Take the lock in the generated bottom halves to fix the\nproblem.\n\nSigned-off-by: Kevin Wolf \u003ckwolf@redhat.com\u003e\nMessage-Id: \u003c20230525124713.401149-2-kwolf@redhat.com\u003e\nReviewed-by: Stefan Hajnoczi \u003cstefanha@redhat.com\u003e\nSigned-off-by: Kevin Wolf \u003ckwolf@redhat.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "ca537cd0ad8f8322cf8afcfe84d521edaffabd52",
      "old_mode": 33188,
      "old_path": "block/block-backend.c",
      "new_id": "26447664ab3ad13dd667e47ee1edaa941bb3749d",
      "new_mode": 33188,
      "new_path": "block/block-backend.c"
    },
    {
      "type": "modify",
      "old_id": "93196229ac0acf0fa2c917b6a15a8fb9d057da95",
      "old_mode": 33188,
      "old_path": "include/block/block-common.h",
      "new_id": "e15395f2cbb7545e418d2910826af35eb1307815",
      "new_mode": 33188,
      "new_path": "include/block/block-common.h"
    },
    {
      "type": "modify",
      "old_id": "60e9b3107c238af13479a16cfac736bb2cabcfa0",
      "old_mode": 33188,
      "old_path": "scripts/block-coroutine-wrapper.py",
      "new_id": "d4a183db61e92483a09a4e215a89db40fa652d28",
      "new_mode": 33188,
      "new_path": "scripts/block-coroutine-wrapper.py"
    }
  ]
}
