'encoded_buf' and 'current_buf' are lock protected during using in save_xbzrle_page() in ram_save_page(), and during freeing in migration_end().
So recommend to let them lock protected during starting, just like we have done to 'cache'. Signed-off-by: Chen Gang <gang.chen.5...@gmail.com> --- arch_init.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/arch_init.c b/arch_init.c index 23044c1..784922c 100644 --- a/arch_init.c +++ b/arch_init.c @@ -783,12 +783,12 @@ static int ram_save_setup(QEMUFile *f, void *opaque) error_report("Error creating cache"); return -1; } - XBZRLE_cache_unlock(); /* We prefer not to abort if there is no memory */ XBZRLE.encoded_buf = g_try_malloc0(TARGET_PAGE_SIZE); if (!XBZRLE.encoded_buf) { error_report("Error allocating encoded_buf"); + XBZRLE_cache_unlock(); return -1; } @@ -797,8 +797,10 @@ static int ram_save_setup(QEMUFile *f, void *opaque) error_report("Error allocating current_buf"); g_free(XBZRLE.encoded_buf); XBZRLE.encoded_buf = NULL; + XBZRLE_cache_unlock(); return -1; } + XBZRLE_cache_unlock(); acct_clear(); } -- 1.7.11.7