sheepdog: fix a core dump while do auto-reconnecting
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 <armbru@redhat.com>
Cc: Kevin Wolf <kwolf@redhat.com>
Cc: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Liu Yuan <namei.unix@gmail.com>
Reviewed-by: Benoît Canet <benoit.canet@nodalink.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
b493317d34
commit
a780dea045
|
@ -716,7 +716,6 @@ static void coroutine_fn send_pending_req(BDRVSheepdogState *s, uint64_t oid)
|
||||||
|
|
||||||
static coroutine_fn void reconnect_to_sdog(void *opaque)
|
static coroutine_fn void reconnect_to_sdog(void *opaque)
|
||||||
{
|
{
|
||||||
Error *local_err = NULL;
|
|
||||||
BDRVSheepdogState *s = opaque;
|
BDRVSheepdogState *s = opaque;
|
||||||
AIOReq *aio_req, *next;
|
AIOReq *aio_req, *next;
|
||||||
|
|
||||||
|
@ -731,6 +730,7 @@ static coroutine_fn void reconnect_to_sdog(void *opaque)
|
||||||
|
|
||||||
/* Try to reconnect the sheepdog server every one second. */
|
/* Try to reconnect the sheepdog server every one second. */
|
||||||
while (s->fd < 0) {
|
while (s->fd < 0) {
|
||||||
|
Error *local_err = NULL;
|
||||||
s->fd = get_sheep_fd(s, &local_err);
|
s->fd = get_sheep_fd(s, &local_err);
|
||||||
if (s->fd < 0) {
|
if (s->fd < 0) {
|
||||||
DPRINTF("Wait for connection to be established\n");
|
DPRINTF("Wait for connection to be established\n");
|
||||||
|
|
Loading…
Reference in New Issue