summaryrefslogtreecommitdiffstats
path: root/src/memblockq.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/memblockq.c')
-rw-r--r--src/memblockq.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/memblockq.c b/src/memblockq.c
index fb4cbc7e..6d4d712a 100644
--- a/src/memblockq.c
+++ b/src/memblockq.c
@@ -82,6 +82,18 @@ void pa_memblockq_push(struct pa_memblockq* bq, const struct pa_memchunk *chunk,
struct memblock_list *q;
assert(bq && chunk && chunk->memblock && chunk->length && (chunk->length % bq->base) == 0);
+ if (bq->blocks_tail && bq->blocks_tail->chunk.memblock == chunk->memblock) {
+ /* Try to merge memory chunks */
+
+ if (bq->blocks_tail->chunk.index+bq->blocks_tail->chunk.length == chunk->index) {
+ bq->blocks_tail->chunk.length += chunk->length;
+ bq->current_length += chunk->length;
+
+ /* fprintf(stderr, __FILE__": merge succeeded: %u\n", chunk->length);*/
+ return;
+ }
+ }
+
q = malloc(sizeof(struct memblock_list));
assert(q);