summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Henningsson <david.henningsson@canonical.com>2015-01-08 13:11:17 +0100
committerDavid Henningsson <david.henningsson@canonical.com>2015-01-08 16:10:50 +0100
commit112a39fa43217ee48922b78e58d69d57579ae893 (patch)
tree5a3c1e29edb7334199282d1701eab190aa4b8cf5
parent4edc15346bb5691283adb22cc3b902685cbf509b (diff)
memblock: Fix more block ID collisions
Since the srb memblock and the audio data were coming from separate pools, and the base index was per pool, they could actually still collide. This patch changes the base index to be global and atomically incremented. Reported-by: Arun Raghavan <arun@accosted.net> Signed-off-by: David Henningsson <david.henningsson@canonical.com>
-rw-r--r--src/pulsecore/memblock.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/pulsecore/memblock.c b/src/pulsecore/memblock.c
index b78131228..d071a5fae 100644
--- a/src/pulsecore/memblock.c
+++ b/src/pulsecore/memblock.c
@@ -151,7 +151,6 @@ struct pa_mempool {
size_t block_size;
unsigned n_blocks;
bool is_remote_writable;
- unsigned export_baseidx;
pa_atomic_t n_init;
@@ -1088,6 +1087,8 @@ finish:
pa_memexport* pa_memexport_new(pa_mempool *p, pa_memexport_revoke_cb_t cb, void *userdata) {
pa_memexport *e;
+ static pa_atomic_t export_baseidx = PA_ATOMIC_INIT(0);
+
pa_assert(p);
pa_assert(cb);
@@ -1106,8 +1107,7 @@ pa_memexport* pa_memexport_new(pa_mempool *p, pa_memexport_revoke_cb_t cb, void
pa_mutex_lock(p->mutex);
PA_LLIST_PREPEND(pa_memexport, p->exports, e);
- e->baseidx = p->export_baseidx;
- p->export_baseidx += PA_MEMEXPORT_SLOTS_MAX;
+ e->baseidx = (uint32_t) pa_atomic_add(&export_baseidx, PA_MEMEXPORT_SLOTS_MAX);
pa_mutex_unlock(p->mutex);
return e;