summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2007-09-18 23:24:13 +0000
committerLennart Poettering <lennart@poettering.net>2007-09-18 23:24:13 +0000
commit781cf499cf1cc36bd4774ff7e4a09f6db4e65038 (patch)
treec3ed319c44d9f1bd7cdaf63de20c941a0e1d2177
parent1fd9afdf7d4a46ec324d002b3f23c23eebff1795 (diff)
properly release memblock always abd as soon as possible
git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/lennart@1864 fefdeb5f-60dc-0310-8127-8f9354f1896f
-rw-r--r--src/modules/rtp/rtp.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/modules/rtp/rtp.c b/src/modules/rtp/rtp.c
index e2496c7d..60df7274 100644
--- a/src/modules/rtp/rtp.c
+++ b/src/modules/rtp/rtp.c
@@ -166,7 +166,7 @@ int pa_rtp_recv(pa_rtp_context *c, pa_memchunk *chunk, pa_mempool *pool) {
pa_assert(c);
pa_assert(chunk);
- chunk->memblock = NULL;
+ pa_memchunk_reset(chunk);
if (ioctl(c->fd, FIONREAD, &size) < 0) {
pa_log_warn("FIONREAD failed: %s", pa_cstrerror(errno));
@@ -189,7 +189,10 @@ int pa_rtp_recv(pa_rtp_context *c, pa_memchunk *chunk, pa_mempool *pool) {
m.msg_controllen = 0;
m.msg_flags = 0;
- if ((r = recvmsg(c->fd, &m, 0)) != size) {
+ r = recvmsg(c->fd, &m, 0);
+ pa_memblock_release(chunk->memblock);
+
+ if (r != size) {
if (r < 0 && errno != EAGAIN && errno != EINTR)
pa_log_warn("recvmsg() failed: %s", r < 0 ? pa_cstrerror(errno) : "size mismatch");
@@ -244,10 +247,8 @@ int pa_rtp_recv(pa_rtp_context *c, pa_memchunk *chunk, pa_mempool *pool) {
return 0;
fail:
- if (chunk->memblock) {
- pa_memblock_release(chunk->memblock);
+ if (chunk->memblock)
pa_memblock_unref(chunk->memblock);
- }
return -1;
}