From 3e0f00f93deed28e68b60f29fc42838575241b0e Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Sat, 19 Aug 2006 17:27:27 +0000 Subject: 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 --- src/pulsecore/shm.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'src/pulsecore') 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 +#endif + #include #include #include @@ -32,6 +36,7 @@ #include #include #include +#include #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); -- cgit