diff options
| author | Lennart Poettering <lennart@poettering.net> | 2006-08-19 17:27:27 +0000 | 
|---|---|---|
| committer | Lennart Poettering <lennart@poettering.net> | 2006-08-19 17:27:27 +0000 | 
| commit | 3e0f00f93deed28e68b60f29fc42838575241b0e (patch) | |
| tree | b4cad6f5ebccaf2b471d002ab58c62dfd9edd8b4 | |
| parent | d50c56a8f31515e1678b5d56b34a00b58b735539 (diff) | |
if MAP_ANONYMOUS is not supported use posix_memalign if possible to allocate the memory pool
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@1296 fefdeb5f-60dc-0310-8127-8f9354f1896f
| -rw-r--r-- | src/pulsecore/shm.c | 21 | 
1 files changed, 19 insertions, 2 deletions
diff --git a/src/pulsecore/shm.c b/src/pulsecore/shm.c index 52867d2a..02528126 100644 --- a/src/pulsecore/shm.c +++ b/src/pulsecore/shm.c @@ -19,6 +19,10 @@    USA.  ***/ +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif +  #include <assert.h>  #include <stdlib.h>  #include <unistd.h> @@ -32,6 +36,7 @@  #include <pulsecore/core-error.h>  #include <pulsecore/log.h>  #include <pulsecore/random.h> +#include <pulse/xmalloc.h>  #include "shm.h" @@ -64,6 +69,15 @@ int pa_shm_create_rw(pa_shm *m, size_t size, int shared, mode_t mode) {              pa_log("mmap() failed: %s", pa_cstrerror(errno));              goto fail;          } +#elif defined(HAVE_POSIX_MEMALIGN) +        { +            int r; +             +            if ((r = posix_memalign(&m->ptr, sysconf(_SC_PAGESIZE), size)) < 0) { +                pa_log("posix_memalign() failed: %s", pa_cstrerror(r)); +                goto fail; +            } +        }  #else          m->ptr = pa_xmalloc(m->size);  #endif @@ -114,7 +128,11 @@ void pa_shm_free(pa_shm *m) {      assert(m->ptr && m->ptr != MAP_FAILED);      assert(m->size > 0); -#ifndef MAP_ANONYMOUS +#if !defined(MAP_ANONYMOUS) && defined(HAVE_POSIX_MEMALIGN) +    if (!m->shared) +        free(m->ptr); +    else +#elif !defined(MAP_ANONYMOUS)      if (!m->shared)          pa_xfree(m->ptr);      else @@ -139,7 +157,6 @@ void pa_shm_punch(pa_shm *m, size_t offset, size_t size) {      assert(m);      assert(m->ptr && m->ptr != MAP_FAILED);      assert(m->size > 0); -    assert(m->do_unlink);      assert(offset < m->size);      assert(offset+size < m->size);  | 
