[libvirt] [PATCH 2/3] lxc: Turn @veths into a string list in virLXCProcessStart

Michal Privoznik mprivozn at redhat.com
Fri Jul 27 12:34:41 UTC 2018


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 at redhat.com>
>> ---
>>  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?

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




More information about the libvir-list mailing list