From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48517) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XMuaB-0000iw-4S for qemu-devel@nongnu.org; Thu, 28 Aug 2014 03:57:29 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XMua5-0008Qj-3q for qemu-devel@nongnu.org; Thu, 28 Aug 2014 03:57:23 -0400 Received: from mail-pa0-x231.google.com ([2607:f8b0:400e:c03::231]:58866) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XMua4-0008QX-Sp for qemu-devel@nongnu.org; Thu, 28 Aug 2014 03:57:17 -0400 Received: by mail-pa0-f49.google.com with SMTP id kq14so1496243pab.8 for ; Thu, 28 Aug 2014 00:57:14 -0700 (PDT) From: Liu Yuan Date: Thu, 28 Aug 2014 15:57:10 +0800 Message-Id: <1409212630-8185-1-git-send-email-namei.unix@gmail.com> Subject: [Qemu-devel] [PATCH] 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. 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 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 3af8743..a3a19b1 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; BlockDriverState *bs = s->bs; @@ -731,6 +730,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