Il 22/08/2014 11:37, Fam Zheng ha scritto: > Exactly. I'd rather not change the contract then. > > Alternatively, we may add a refcnt field to BlockDriverAioCB and grab one > before > calling .cancel, so the qemu_aio_release will not free it.
Yes, and I don't exclude that sooner or later we'll have to add reference counts to AIOCB anyway. However, reference counting is not _that_ cheap so for now I'd rather see other solutions explored. The problem is implementing cancel_sync in terms of cancel. The simplest solution, for now, is to make bdrv_aio_cancel_async return false if the callback is not implemented, and fall back to synchronous cancellation. Paolo