From d82c6bcf30bf0175fa7a0dff74afcebfce335f26 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Mon, 2 Jan 2012 17:07:31 +0100 Subject: [PATCH] virsh: Fix checking for reconnect conditions virshReportError() function frees the most recent error reported from libvirt. Condition that checks if connection to the daemon was broken during last command was then limited to check for SIGPIPE signal not taking into account possible errors signalized without SIGPIPE. This patch moves the check before the error is freed, to take into account code that does not emit SIGPIPE while failing. * tools/virsh.c: - move check for broken connection before error print. --- tools/virsh.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/tools/virsh.c b/tools/virsh.c index e089f7b2f8..0bc05196b6 100644 --- a/tools/virsh.c +++ b/tools/virsh.c @@ -17041,18 +17041,20 @@ vshCommandRun(vshControl *ctl, const vshCmd *cmd) if (enable_timing) GETTIMEOFDAY(&after); + /* try to automatically catch disconnections */ + if (!ret && + ((last_error != NULL) && + (((last_error->code == VIR_ERR_SYSTEM_ERROR) && + (last_error->domain == VIR_FROM_REMOTE)) || + (last_error->code == VIR_ERR_RPC) || + (last_error->code == VIR_ERR_NO_CONNECT) || + (last_error->code == VIR_ERR_INVALID_CONN)))) + disconnected++; + if (!ret) virshReportError(ctl); - /* try to automatically catch disconnections */ - if (!ret && - ((disconnected != 0) || - ((last_error != NULL) && - (((last_error->code == VIR_ERR_SYSTEM_ERROR) && - (last_error->domain == VIR_FROM_REMOTE)) || - (last_error->code == VIR_ERR_RPC) || - (last_error->code == VIR_ERR_NO_CONNECT) || - (last_error->code == VIR_ERR_INVALID_CONN))))) + if (!ret && disconnected != 0) vshReconnect(ctl); if (STREQ(cmd->def->name, "quit")) /* hack ... */