On Fri, Jul 27, 2018 at 02:34:41PM +0200, Michal Privoznik wrote: > On 07/27/2018 10:37 AM, Erik Skultety wrote: > > On Thu, Jul 26, 2018 at 05:36:28PM +0200, Michal Privoznik wrote: > >> This way it will be easier to use autofree. > >> > >> Signed-off-by: Michal Privoznik <mprivozn@xxxxxxxxxx> > >> --- > >> src/lxc/lxc_process.c | 24 +++++++++--------------- > >> 1 file changed, 9 insertions(+), 15 deletions(-) > >> > >> diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c > >> index d021a890f7..3ac39d598c 100644 > >> --- a/src/lxc/lxc_process.c > >> +++ b/src/lxc/lxc_process.c > >> @@ -514,8 +514,7 @@ static int virLXCProcessSetupNamespaces(virConnectPtr conn, > >> * virLXCProcessSetupInterfaces: > >> * @conn: pointer to connection > >> * @def: pointer to virtual machine structure > >> - * @nveths: number of interfaces > >> - * @veths: interface names > >> + * @veths: string list of interface names > >> * > >> * Sets up the container interfaces by creating the veth device pairs and > >> * attaching the parent end to the appropriate bridge. The container end > >> @@ -525,7 +524,6 @@ static int virLXCProcessSetupNamespaces(virConnectPtr conn, > >> */ > >> static int virLXCProcessSetupInterfaces(virConnectPtr conn, > >> virDomainDefPtr def, > >> - size_t *nveths, > >> char ***veths) > >> { > >> int ret = -1; > >> @@ -534,6 +532,8 @@ static int virLXCProcessSetupInterfaces(virConnectPtr conn, > >> virDomainNetDefPtr net; > >> virDomainNetType type; > >> > >> + *veths = NULL; > >> + > >> for (i = 0; i < def->nnets; i++) { > >> char *veth = NULL; > >> virNetDevBandwidthPtr actualBandwidth; > >> @@ -549,9 +549,6 @@ static int virLXCProcessSetupInterfaces(virConnectPtr conn, > >> if (virDomainNetAllocateActualDevice(def, net) < 0) > >> goto cleanup; > >> > >> - if (VIR_EXPAND_N(*veths, *nveths, 1) < 0) > >> - goto cleanup; > > > > Contrary to what I said in the previous patch, I hadn't realized we were > > expanding a list by 1 in a loop before I looked at this patch. That is very > > inefficient and we'll keep doing that. Now I'm biased towards tracking the size > > of the list so that we can do VIR_EXPAND_N(*veths, 0, def->nnets) and then just > > add new elements, of course that would require tweaking the virStringListAdd > > more. > > > > Hold on. I'm not quite sure I follow. Are you suggesting to pre-allocate > the string list and ditch virStringListAdd completely? Something like > this? Yes, that's the idea. Originally, I didn't think dropping virStringListAdd would be necessary, but it's clear from the snippet below that it would. Erik > > diff --git i/src/lxc/lxc_process.c w/src/lxc/lxc_process.c > index 6eef17d1ce..33c806630b 100644 > --- i/src/lxc/lxc_process.c > +++ w/src/lxc/lxc_process.c > @@ -532,7 +532,8 @@ static int virLXCProcessSetupInterfaces(virConnectPtr conn, > virDomainNetDefPtr net; > virDomainNetType type; > > - *veths = NULL; > + if (VIR_ALLOC_N(*veths, def->nnets + 1) < 0) > + return -1; > > for (i = 0; i < def->nnets; i++) { > char *veth = NULL; > @@ -601,8 +602,7 @@ static int virLXCProcessSetupInterfaces(virConnectPtr conn, > } > } > > - if (virStringListAdd(veths, veth) < 0) > - goto cleanup; > + (*veths)[i] = veth; > > if (VIR_STRDUP(def->nets[i]->ifname_guest_actual, veth) < 0) > goto cleanup; > > > Michal > > -- > libvir-list mailing list > libvir-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/libvir-list -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list