mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-11 15:27:47 +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.
|
||||
*/
|
||||
virConnectPtr conn;
|
||||
virConnectPtr interfaceConn;
|
||||
|
||||
daemonClientStreamPtr streams;
|
||||
};
|
||||
|
@ -1745,6 +1745,8 @@ void remoteClientFree(void *data)
|
||||
|
||||
if (priv->conn)
|
||||
virConnectClose(priv->conn);
|
||||
if (priv->interfaceConn)
|
||||
virConnectClose(priv->interfaceConn);
|
||||
|
||||
VIR_FREE(priv);
|
||||
}
|
||||
@ -1817,6 +1819,8 @@ remoteDispatchConnectOpen(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
if (priv->conn == NULL)
|
||||
goto cleanup;
|
||||
|
||||
priv->interfaceConn = virObjectRef(priv->conn);
|
||||
|
||||
/* force update the @readonly attribute which was inherited from the
|
||||
* virNetServerService object - this is important for sockets that are RW
|
||||
* by default, but do accept RO flags, e.g. TCP
|
||||
|
@ -111,9 +111,32 @@ sub name_to_TypeName {
|
||||
}
|
||||
|
||||
sub get_conn_arg {
|
||||
my $proc = shift;
|
||||
my $args = shift;
|
||||
my $rets = shift;
|
||||
|
||||
if ($structprefix eq "admin") {
|
||||
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";
|
||||
}
|
||||
|
||||
@ -481,7 +504,7 @@ elsif ($mode eq "server") {
|
||||
my @free_list = ();
|
||||
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
|
||||
if ($argtype ne "void") {
|
||||
|
Loading…
Reference in New Issue
Block a user