diff options
author | Lennart Poettering <lennart@poettering.net> | 2007-09-02 20:37:17 +0000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2007-09-02 20:37:17 +0000 |
commit | f36ca797160c7eddaacf5cc18d366a74dbee229a (patch) | |
tree | 26edbfe548f7f4dce15b54fbf2538908ff2f71ae | |
parent | 2f7b6fead11e781e6071df09ea1c3ae2cadb845c (diff) |
add new API pa_memblock_will_need() and make use of PA_PAGE_SIZE macro
git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/lennart@1746 fefdeb5f-60dc-0310-8127-8f9354f1896f
-rw-r--r-- | src/pulsecore/memblock.c | 32 | ||||
-rw-r--r-- | src/pulsecore/memblock.h | 2 |
2 files changed, 21 insertions, 13 deletions
diff --git a/src/pulsecore/memblock.c b/src/pulsecore/memblock.c index 3e2b0064..479c74f7 100644 --- a/src/pulsecore/memblock.c +++ b/src/pulsecore/memblock.c @@ -32,6 +32,7 @@ #include <string.h> #include <unistd.h> #include <signal.h> +#include <errno.h> #include <pulse/xmalloc.h> #include <pulse/def.h> @@ -42,6 +43,7 @@ #include <pulsecore/semaphore.h> #include <pulsecore/macro.h> #include <pulsecore/flist.h> +#include <pulsecore/core-util.h> #include "memblock.h" @@ -596,6 +598,20 @@ void pa_memblock_unref_fixed(pa_memblock *b) { pa_memblock_unref(b); } +/* No lock necessary. */ +pa_memblock *pa_memblock_will_need(pa_memblock *b) { + void *p; + + pa_assert(b); + pa_assert(PA_REFCNT_VALUE(b) > 0); + + p = pa_memblock_acquire(b); + pa_will_need(p, b->length); + pa_memblock_release(b); + + return b; +} + /* Self-locked. This function is not multiple-caller safe */ static void memblock_replace_import(pa_memblock *b) { pa_memimport_segment *seg; @@ -628,7 +644,6 @@ static void memblock_replace_import(pa_memblock *b) { } pa_mempool* pa_mempool_new(int shared) { - size_t ps; pa_mempool *p; p = pa_xnew(pa_mempool, 1); @@ -636,18 +651,9 @@ pa_mempool* pa_mempool_new(int shared) { p->mutex = pa_mutex_new(1); p->semaphore = pa_semaphore_new(0); -#ifdef HAVE_SYSCONF - ps = (size_t) sysconf(_SC_PAGESIZE); -#elif defined(PAGE_SIZE) - ps = (size_t) PAGE_SIZE; -#else - ps = 4096; /* Let's hope it's like x86. */ -#endif - - p->block_size = (PA_MEMPOOL_SLOT_SIZE/ps)*ps; - - if (p->block_size < ps) - p->block_size = ps; + p->block_size = PA_PAGE_ALIGN(PA_MEMPOOL_SLOT_SIZE); + if (p->block_size < PA_PAGE_SIZE) + p->block_size = PA_PAGE_SIZE; p->n_blocks = PA_MEMPOOL_SLOTS_MAX; diff --git a/src/pulsecore/memblock.h b/src/pulsecore/memblock.h index 7fa6627e..9bf7d8a5 100644 --- a/src/pulsecore/memblock.h +++ b/src/pulsecore/memblock.h @@ -113,6 +113,8 @@ void pa_memblock_release(pa_memblock *b); size_t pa_memblock_get_length(pa_memblock *b); pa_mempool * pa_memblock_get_pool(pa_memblock *b); +pa_memblock *pa_memblock_will_need(pa_memblock *b); + /* The memory block manager */ pa_mempool* pa_mempool_new(int shared); void pa_mempool_free(pa_mempool *p); |