mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-25 22:15:20 +00:00
remote: use a separate connection for interface APIs
Reviewed-by: John Ferlan <jferlan@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
6f9750012c
commit
cb712443b7
@ -74,6 +74,7 @@ struct daemonClientPrivate {
|
|||||||
* called, it will be set back to NULL if that succeeds.
|
* called, it will be set back to NULL if that succeeds.
|
||||||
*/
|
*/
|
||||||
virConnectPtr conn;
|
virConnectPtr conn;
|
||||||
|
virConnectPtr interfaceConn;
|
||||||
|
|
||||||
daemonClientStreamPtr streams;
|
daemonClientStreamPtr streams;
|
||||||
};
|
};
|
||||||
|
@ -1745,6 +1745,8 @@ void remoteClientFree(void *data)
|
|||||||
|
|
||||||
if (priv->conn)
|
if (priv->conn)
|
||||||
virConnectClose(priv->conn);
|
virConnectClose(priv->conn);
|
||||||
|
if (priv->interfaceConn)
|
||||||
|
virConnectClose(priv->interfaceConn);
|
||||||
|
|
||||||
VIR_FREE(priv);
|
VIR_FREE(priv);
|
||||||
}
|
}
|
||||||
@ -1817,6 +1819,8 @@ remoteDispatchConnectOpen(virNetServerPtr server ATTRIBUTE_UNUSED,
|
|||||||
if (priv->conn == NULL)
|
if (priv->conn == NULL)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
|
priv->interfaceConn = virObjectRef(priv->conn);
|
||||||
|
|
||||||
/* force update the @readonly attribute which was inherited from the
|
/* force update the @readonly attribute which was inherited from the
|
||||||
* virNetServerService object - this is important for sockets that are RW
|
* virNetServerService object - this is important for sockets that are RW
|
||||||
* by default, but do accept RO flags, e.g. TCP
|
* by default, but do accept RO flags, e.g. TCP
|
||||||
|
@ -111,9 +111,32 @@ sub name_to_TypeName {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub get_conn_arg {
|
sub get_conn_arg {
|
||||||
|
my $proc = shift;
|
||||||
|
my $args = shift;
|
||||||
|
my $rets = shift;
|
||||||
|
|
||||||
if ($structprefix eq "admin") {
|
if ($structprefix eq "admin") {
|
||||||
return "priv->dmn";
|
return "priv->dmn";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
my @types;
|
||||||
|
push @types, @{$args} if $args;
|
||||||
|
push @types, @{$rets} if $rets;
|
||||||
|
|
||||||
|
# This correctly detects most APIs
|
||||||
|
foreach my $type (@types) {
|
||||||
|
if ($type =~ /remote_nonnull_interface/) {
|
||||||
|
return "priv->interfaceConn";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# This is for the few virConnect APIs that
|
||||||
|
# return things which aren't objects. eg list
|
||||||
|
# of pool names, or number of pools.
|
||||||
|
if ($proc =~ /Connect.*Interface/ || $proc =~ /InterfaceChange/) {
|
||||||
|
return "priv->interfaceConn";
|
||||||
|
}
|
||||||
|
|
||||||
return "priv->conn";
|
return "priv->conn";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -481,7 +504,7 @@ elsif ($mode eq "server") {
|
|||||||
my @free_list = ();
|
my @free_list = ();
|
||||||
my @free_list_on_error = ("virNetMessageSaveError(rerr);");
|
my @free_list_on_error = ("virNetMessageSaveError(rerr);");
|
||||||
|
|
||||||
my $conn = get_conn_arg();
|
my $conn = get_conn_arg($call->{ProcName}, $call->{args_members}, $call->{ret_members});
|
||||||
|
|
||||||
# handle arguments to the function
|
# handle arguments to the function
|
||||||
if ($argtype ne "void") {
|
if ($argtype ne "void") {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user