The following hack makes the test pass but there are larger safety issues that I'll need to look at on Wednesday:
diff --git a/nbd/server.c b/nbd/server.c index 895cf0a752..cf4b7d5c6d 100644 --- a/nbd/server.c +++ b/nbd/server.c @@ -1617,7 +1617,7 @@ static void nbd_drained_begin(void *opaque) } } -static void nbd_drained_end(void *opaque) +static void nbd_resume_clients(void *opaque) { NBDExport *exp = opaque; NBDClient *client; @@ -1628,6 +1628,15 @@ static void nbd_drained_end(void *opaque) } } +static void nbd_drained_end(void *opaque) +{ + NBDExport *exp = opaque; + + /* TODO how to make sure exp doesn't go away? */ + /* TODO what if AioContext changes before this runs? */ + aio_bh_schedule_oneshot(nbd_export_aio_context(exp), nbd_resume_clients, exp); +} + static bool nbd_drained_poll(void *opaque) { NBDExport *exp = opaque;