From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46970) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XMww0-0002iA-3F for qemu-devel@nongnu.org; Thu, 28 Aug 2014 06:28:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XMwvu-0007yu-38 for qemu-devel@nongnu.org; Thu, 28 Aug 2014 06:28:04 -0400 Received: from mail-pa0-x229.google.com ([2607:f8b0:400e:c03::229]:55027) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XMwvt-0007yn-SP for qemu-devel@nongnu.org; Thu, 28 Aug 2014 06:27:58 -0400 Received: by mail-pa0-f41.google.com with SMTP id lj1so2034533pab.0 for ; Thu, 28 Aug 2014 03:27:56 -0700 (PDT) From: Liu Yuan Date: Thu, 28 Aug 2014 18:27:55 +0800 Message-Id: <1409221675-21916-1-git-send-email-namei.unix@gmail.com> Subject: [Qemu-devel] [PATCH v2] sheepdog: fix a core dump while do auto-reconnecting List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: sheepdog@lists.wpkg.org Cc: Kevin Wolf , qemu-devel@nongnu.org, Stefan Hajnoczi , Markus Armbruster We should reinit local_err as NULL inside the while loop or g_free() will report corrupption and abort the QEMU when sheepdog driver tries reconnecting. This was broken in commit 356b4ca. qemu-system-x86_64: failed to get the header, Resource temporarily unavailable qemu-system-x86_64: Failed to connect to socket: Connection refused qemu-system-x86_64: (null) [xcb] Unknown sequence number while awaiting reply [xcb] Most likely this is a multi-threaded client and XInitThreads has not been called [xcb] Aborting, sorry about that. qemu-system-x86_64: ../../src/xcb_io.c:298: poll_for_response: Assertion `!xcb_xlib_threads_sequence_lost' failed. Aborted (core dumped) Cc: qemu-devel@nongnu.org Cc: Markus Armbruster Cc: Kevin Wolf Cc: Stefan Hajnoczi Reviewed-by: Markus Armbruster Signed-off-by: Liu Yuan --- block/sheepdog.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/block/sheepdog.c b/block/sheepdog.c index 12cbd9d..53c24d6 100644 --- a/block/sheepdog.c +++ b/block/sheepdog.c @@ -712,7 +712,6 @@ static void coroutine_fn send_pending_req(BDRVSheepdogState *s, uint64_t oid) static coroutine_fn void reconnect_to_sdog(void *opaque) { - Error *local_err = NULL; BDRVSheepdogState *s = opaque; AIOReq *aio_req, *next; @@ -727,6 +726,7 @@ static coroutine_fn void reconnect_to_sdog(void *opaque) /* Try to reconnect the sheepdog server every one second. */ while (s->fd < 0) { + Error *local_err = NULL; s->fd = get_sheep_fd(s, &local_err); if (s->fd < 0) { DPRINTF("Wait for connection to be established\n"); -- 1.9.1