]> code.delx.au - pulseaudio/commitdiff
properly release memblock always abd as soon as possible
authorLennart Poettering <lennart@poettering.net>
Tue, 18 Sep 2007 23:24:13 +0000 (23:24 +0000)
committerLennart Poettering <lennart@poettering.net>
Tue, 18 Sep 2007 23:24:13 +0000 (23:24 +0000)
git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/lennart@1864 fefdeb5f-60dc-0310-8127-8f9354f1896f

src/modules/rtp/rtp.c

index e2496c7d2700a4ca3d2dbb0fe22e64fc418cf20a..60df72741d7f02c4c93a9fc8d75e1749abfe9287 100644 (file)
@@ -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;
 }