]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
add map_anonymoys support
authorAnthony Minessale <anthm@freeswitch.org>
Fri, 4 Sep 2015 16:38:16 +0000 (11:38 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Fri, 4 Sep 2015 16:38:16 +0000 (11:38 -0500)
libs/libks/src/include/mpool.h
libs/libks/src/include/mpool_loc.h
libs/libks/src/mpool.c

index 16ccb3c1b90cabf3c086a88bd92e2e8a2e12208b..063cf5063a5c769e9a795dd7938e7498395e1b68 100644 (file)
  */
 #define MPOOL_FLAG_USE_SBRK            (1<<3)
 
+/*
+ * Use MMAP_ANONYMOUS instead of /dev/zero
+ */
+#define MPOOL_FLAG_ANONYMOUS           (1<<4)
+
 /*
  * Mpool error codes
  */
index aa39e9dde68e552de0dd48aadfa997f8b138c295..a3fdbda3db35baf0f93226e637a6c23822cdd961 100644 (file)
@@ -73,6 +73,7 @@
 typedef struct {
        unsigned int            mp_magic;       /* magic number for struct */
        unsigned int            mp_flags;       /* flags for the struct */
+       unsigned int            mp_mmflags;     /* flags for mmap */
        unsigned long           mp_alloc_c;     /* number of allocations */
        unsigned long           mp_user_alloc;  /* user bytes allocated */
        unsigned long           mp_max_alloc;   /* maximum user bytes allocated */
index c285621a82e273bd5f97a17b2663eeda7fd0bb81..1c2d0320677b9e568ceba9b83b7b27b38008d3e1 100644 (file)
@@ -273,7 +273,7 @@ static      void    *alloc_pages(mpool_t *mp_p, const unsigned int page_n,
 #endif
     
                /* mmap from /dev/zero */
-               mem = mmap((caddr_t)mp_p->mp_addr, size, PROT_READ | PROT_WRITE, state,
+               mem = mmap((caddr_t)mp_p->mp_addr, size, mp_p->mp_mmflags, state,
                                   mp_p->mp_fd, mp_p->mp_top);
                if (mem == (void *)MAP_FAILED) {
                        if (errno == ENOMEM) {
@@ -937,17 +937,24 @@ mpool_t   *mpool_open(const unsigned int flags, const unsigned int page_size,
                }
        }
   
+       mp.mp_mmflags = PROT_READ | PROT_WRITE;
+
        if (BIT_IS_SET(flags, MPOOL_FLAG_USE_SBRK)) {
                mp.mp_fd = -1;
                mp.mp_addr = NULL;
                mp.mp_top = 0;
        }
        else {
-               /* open dev-zero for our mmaping */
-               mp.mp_fd = open("/dev/zero", O_RDWR, 0);
-               if (mp.mp_fd < 0) {
-                       SET_POINTER(error_p, MPOOL_ERROR_OPEN_ZERO);
-                       return NULL;
+               if (BIT_IS_SET(flags, MPOOL_FLAG_ANONYMOUS)) {
+                       mp.mp_fd = -1;
+                       mp.mp_mmflags |= MAP_ANONYMOUS;
+               } else {
+                       /* open dev-zero for our mmaping */
+                       mp.mp_fd = open("/dev/zero", O_RDWR, 0);
+                       if (mp.mp_fd < 0) {
+                               SET_POINTER(error_p, MPOOL_ERROR_OPEN_ZERO);
+                               return NULL;
+                       }
                }
                mp.mp_addr = start_addr;
                /* we start at the front of the file */