> > > Make sure we don't hand out the wrong block, in case we have the > > > same block ID in different SHM segments. > > > > this adds two checks: for block type and that the shm id matches > > > > using %u in pa_log() would save the (int) casts; > > Ok > > > maybe both, shm_id and > > memory.id could be logged? > > This would require two logs because if b->type != PA_MEMBLOCK_IMPORTED then > there is no memory.id. maybe the check b->type == PA_MEMBLOCK_IMPORTED should be an assert? anyway, I tested and the fix seems to work (no distortion anymore at the beginning of record stream) thanks, p. > > > Signed-off-by: David Henningsson <david.henningsson at canonical.com> > > > --- > > > src/pulsecore/memblock.c | 5 +++++ > > > 1 file changed, 5 insertions(+) > > > > > > diff --git a/src/pulsecore/memblock.c b/src/pulsecore/memblock.c > > > index f8b008f..ca24dec 100644 > > > --- a/src/pulsecore/memblock.c > > > +++ b/src/pulsecore/memblock.c > > > @@ -1017,6 +1017,11 @@ pa_memblock* pa_memimport_get(pa_memimport *i, > > > uint32_t block_id, uint32_t shm_i > > > pa_mutex_lock(i->mutex); > > > > > > if ((b = pa_hashmap_get(i->blocks, PA_UINT32_TO_PTR(block_id)))) { > > > + if (b->type != PA_MEMBLOCK_IMPORTED || > > > b->per_type.imported.segment->memory.id != shm_id) { > > > + pa_log("Cannot import memory due to to block ID collision > > > (block %d, shm id %d)!", (int) block_id, (int) shm_id); > > > + b = NULL; > > > + goto finish; > > > + } > > > pa_memblock_ref(b); > > > goto finish; > > > } > > > > > > > -- Peter Meerwald +43-664-2444418 (mobile)