vppinfra: introduce clib_mem_vm_ext_free() to avoid fd leaks 09/15209/2
authorHaiyang Tan <haiyangtan@tencent.com>
Wed, 10 Oct 2018 02:09:45 +0000 (19:09 -0700)
committerDamjan Marion <dmarion@me.com>
Wed, 10 Oct 2018 21:32:46 +0000 (21:32 +0000)
Change-Id: I8691a10493d159a97574550c111f07722960a7cd
Signed-off-by: Haiyang Tan <haiyangtan@tencent.com>
src/plugins/dpdk/main.c
src/vppinfra/linux/mem.c
src/vppinfra/mem.h

index 72dffca..2bea101 100644 (file)
@@ -132,7 +132,7 @@ check_hugetlb:
       goto error;
     }
   else
-    clib_mem_vm_free (alloc.addr, 1 << alloc.log2_page_size);
+    clib_mem_vm_ext_free (&alloc);
 
   goto done;
 
index bceb3b2..2d968fa 100644 (file)
@@ -252,6 +252,17 @@ done:
   return err;
 }
 
+void
+clib_mem_vm_ext_free (clib_mem_vm_alloc_t * a)
+{
+  if (a != 0)
+    {
+      clib_mem_vm_free (a->addr, 1 << a->log2_page_size);
+      if (a->fd != -1)
+       close (a->fd);
+    }
+}
+
 u64 *
 clib_mem_vm_get_paddr (void *mem, int log2_page_size, int n_pages)
 {
index 0702aab..fa7de20 100644 (file)
@@ -387,6 +387,7 @@ typedef struct
 } clib_mem_vm_alloc_t;
 
 clib_error_t *clib_mem_vm_ext_alloc (clib_mem_vm_alloc_t * a);
+void clib_mem_vm_ext_free (clib_mem_vm_alloc_t * a);
 u64 clib_mem_vm_get_page_size (int fd);
 int clib_mem_vm_get_log2_page_size (int fd);
 u64 *clib_mem_vm_get_paddr (void *mem, int log2_page_size, int n_pages);