提交 a02a859b 编写于 作者: C Cole Robinson

virsh: Don't clear old connection if 'connect $uri' fails

    virsh # list --all
     Id    Name                           State
    ----------------------------------------------------
     1     test                           running

    virsh # connect frob
    error: Failed to connect to the hypervisor
    error: no connection driver available for frob

    virsh # list --all
    error: failed to connect to the hypervisor
    error: no valid connection
    error: no connection driver available for frob

Seems sensible IMO to just not clear out the old connection state
until the new virConnectOpen succeeds.

https://bugzilla.redhat.com/show_bug.cgi?id=829160
上级 f1bae376
......@@ -292,6 +292,17 @@ cmdConnect(vshControl *ctl, const vshCmd *cmd)
bool ro = vshCommandOptBool(cmd, "readonly");
const char *name = NULL;
virshControlPtr priv = ctl->privData;
virConnectPtr conn;
if (vshCommandOptStringReq(ctl, cmd, "name", &name) < 0)
return false;
conn = virshConnect(ctl, name, ro);
if (!conn) {
vshError(ctl, "%s", _("Failed to connect to the hypervisor"));
return false;
}
if (priv->conn) {
int ret;
......@@ -303,13 +314,10 @@ cmdConnect(vshControl *ctl, const vshCmd *cmd)
else if (ret > 0)
vshError(ctl, "%s", _("One or more references were leaked after "
"disconnect from the hypervisor"));
priv->conn = NULL;
}
priv->conn = conn;
VIR_FREE(ctl->connname);
if (vshCommandOptStringReq(ctl, cmd, "name", &name) < 0)
return false;
ctl->connname = vshStrdup(ctl, name);
priv->useGetInfo = false;
......@@ -317,13 +325,6 @@ cmdConnect(vshControl *ctl, const vshCmd *cmd)
priv->blockJobNoBytes = false;
priv->readonly = ro;
priv->conn = virshConnect(ctl, ctl->connname, priv->readonly);
if (!priv->conn) {
vshError(ctl, "%s", _("Failed to connect to the hypervisor"));
return false;
}
if (virConnectRegisterCloseCallback(priv->conn, virshCatchDisconnect,
ctl, NULL) < 0)
vshError(ctl, "%s", _("Unable to register disconnect callback"));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册