summaryrefslogtreecommitdiffstats
path: root/src/pulsecore/sound-file.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pulsecore/sound-file.c')
-rw-r--r--src/pulsecore/sound-file.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/pulsecore/sound-file.c b/src/pulsecore/sound-file.c
index 1bf650e2..c74a1586 100644
--- a/src/pulsecore/sound-file.c
+++ b/src/pulsecore/sound-file.c
@@ -40,7 +40,11 @@ int pa_sound_file_load(pa_mempool *pool, const char *fname, pa_sample_spec *ss,
int ret = -1;
size_t l;
sf_count_t (*readf_function)(SNDFILE *sndfile, void *ptr, sf_count_t frames) = NULL;
- assert(fname && ss && chunk);
+ void *ptr = NULL;
+
+ assert(fname);
+ assert(ss);
+ assert(chunk);
chunk->memblock = NULL;
chunk->index = chunk->length = 0;
@@ -97,8 +101,10 @@ int pa_sound_file_load(pa_mempool *pool, const char *fname, pa_sample_spec *ss,
chunk->index = 0;
chunk->length = l;
- if ((readf_function && readf_function(sf, chunk->memblock->data, sfinfo.frames) != sfinfo.frames) ||
- (!readf_function && sf_read_raw(sf, chunk->memblock->data, l) != l)) {
+ ptr = pa_memblock_acquire(chunk->memblock);
+
+ if ((readf_function && readf_function(sf, ptr, sfinfo.frames) != sfinfo.frames) ||
+ (!readf_function && sf_read_raw(sf, ptr, l) != l)) {
pa_log("Premature file end");
goto finish;
}
@@ -110,6 +116,9 @@ finish:
if (sf)
sf_close(sf);
+ if (ptr)
+ pa_memblock_release(chunk->memblock);
+
if (ret != 0 && chunk->memblock)
pa_memblock_unref(chunk->memblock);