diff options
author | Lennart Poettering <lennart@poettering.net> | 2009-07-24 20:21:30 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2009-07-24 20:21:30 +0200 |
commit | 211d0f3dcb23c6d63dd6a212826a872ce972e4ee (patch) | |
tree | acf0a9c4ba0cfd02f75ca5f891f050c092c86c3d /src/pulse/stream.c | |
parent | e7ca058427e795b9c2b436c4a819e8d8354ee9de (diff) |
client: limit block size for zero-copy operations to mempool block size
Diffstat (limited to 'src/pulse/stream.c')
-rw-r--r-- | src/pulse/stream.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/pulse/stream.c b/src/pulse/stream.c index bbd01499..72d49e11 100644 --- a/src/pulse/stream.c +++ b/src/pulse/stream.c @@ -1207,6 +1207,17 @@ int pa_stream_begin_write( PA_CHECK_VALIDITY(s->context, data, PA_ERR_INVALID); PA_CHECK_VALIDITY(s->context, nbytes && *nbytes != 0, PA_ERR_INVALID); + if (*nbytes != (size_t) -1) { + size_t m, fs; + + m = pa_mempool_block_size_max(s->context->mempool); + fs = pa_frame_size(&s->sample_spec); + + m = (m / fs) * fs; + if (*nbytes > m) + *nbytes = m; + } + if (!s->write_memblock) { s->write_memblock = pa_memblock_new(s->context->mempool, *nbytes); s->write_data = pa_memblock_acquire(s->write_memblock); |