On Fri 22 Mar 2019 04:54:59 PM CET, Alberto Garcia <be...@igalia.com> wrote: > E <- D <- C <- B <- A > > 2) commit from C to E, then stream from C to A > > This fails because the commit job inserts a filter between C and B > and the bdrv_freeze_backing_chain(bs, base) call in stream_start() > fails. > > However! I found this crash in a couple of occasions, I believe that > it happens if the commit job finishes before block_stream, but I need > to debug it further to see why the previous error didn't happen.
I was debugging this today. Here's what happens: - The commit job starts - The stream job starts and yields during bdrv_reopen_set_read_only() in stream_start() - The commit job ends and removes C and D from the backing chain. - stream_start() resumes but now 'C' doesn't exist anymore, so BlockDriverState *base is a dead pointer. Berto