Initialization of memory backends may take a while when prealloc=yes is used, depending on their size. Initializing memory backends before chardevs may delay the creation of monitor sockets, and trigger timeouts on management software that waits until the monitor socket is created by QEMU. See, for example, the bug report at: https://bugzilla.redhat.com/show_bug.cgi?id=1371211
This patch fixes the problem by adding "memory-backend-*" classes to the delayed-initialization list. I believe a more appropriate fix would be creating objects and chardevs in the same ordering specified on the command-line, but this patch should fix the bug until we figure out a better way. Signed-off-by: Eduardo Habkost <ehabk...@redhat.com> --- vl.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/vl.c b/vl.c index b3c80d5..7764032 100644 --- a/vl.c +++ b/vl.c @@ -2810,6 +2810,15 @@ static bool object_create_initial(const char *type) return false; } + /* Initialization of memory backends may delay chardev + * initialization for too long, and trigger timeouts on + * software that waits for a monitor socket to be created + * (e.g. libvirt). + */ + if (g_str_has_prefix(type, "memory-backend-")) { + return false; + } + return true; } -- 2.7.4