[pulseaudio-commits] src/pulsecore

Tanu Kaskinen tanuk at kemper.freedesktop.org
Mon Jun 24 12:18:40 PDT 2013


 src/pulsecore/protocol-esound.c |   15 +++++++++------
 src/pulsecore/protocol-http.c   |   10 +++++++---
 src/pulsecore/protocol-simple.c |   10 +++++++---
 3 files changed, 23 insertions(+), 12 deletions(-)

New commits:
commit 8127f8f9c55fe4aa7c1d330beb406fa4100b478c
Author: David Henningsson <david.henningsson at canonical.com>
Date:   Mon Jun 24 17:29:26 2013 +0200

    protocol-esound/http/simple: Make sure callers can handle iochannel_write changes
    
    With the new behaviour, you will not always get a callback after a
    successful write. Make sure the callers can properly handle this.
    
    Signed-off-by: David Henningsson <david.henningsson at canonical.com>

diff --git a/src/pulsecore/protocol-esound.c b/src/pulsecore/protocol-esound.c
index ff4afc6..9509604 100644
--- a/src/pulsecore/protocol-esound.c
+++ b/src/pulsecore/protocol-esound.c
@@ -1196,10 +1196,6 @@ static int do_write(connection *c) {
 
         pa_assert(c->write_data_index < c->write_data_length);
         if ((r = pa_iochannel_write(c->io, (uint8_t*) c->write_data+c->write_data_index, c->write_data_length-c->write_data_index)) < 0) {
-
-            if (r < 0 && (errno == EINTR || errno == EAGAIN))
-                return 0;
-
             pa_log("write(): %s", pa_cstrerror(errno));
             return -1;
         }
@@ -1208,6 +1204,8 @@ static int do_write(connection *c) {
         if (c->write_data_index >= c->write_data_length)
             c->write_data_length = c->write_data_index = 0;
 
+        return 1;
+
     } else if (c->state == ESD_STREAMING_DATA && c->source_output) {
         pa_memchunk chunk;
         ssize_t r;
@@ -1231,6 +1229,7 @@ static int do_write(connection *c) {
         }
 
         pa_memblockq_drop(c->output_memblockq, (size_t) r);
+        return 1;
     }
 
     return 0;
@@ -1254,9 +1253,13 @@ static void do_work(connection *c) {
          * here, instead of simply waiting for read() to return 0. */
         goto fail;
 
-    if (pa_iochannel_is_writable(c->io))
-        if (do_write(c) < 0)
+    while (pa_iochannel_is_writable(c->io)) {
+        int r = do_write(c);
+        if (r < 0)
             goto fail;
+        if (r == 0)
+            break;
+    }
 
     return;
 
diff --git a/src/pulsecore/protocol-http.c b/src/pulsecore/protocol-http.c
index 1dcf010..7d49bf8 100644
--- a/src/pulsecore/protocol-http.c
+++ b/src/pulsecore/protocol-http.c
@@ -168,7 +168,7 @@ static int do_write(struct connection *c) {
 
     pa_memblockq_drop(c->output_memblockq, (size_t) r);
 
-    return 0;
+    return 1;
 }
 
 /* Called from main context */
@@ -178,9 +178,13 @@ static void do_work(struct connection *c) {
     if (pa_iochannel_is_hungup(c->io))
         goto fail;
 
-    if (pa_iochannel_is_writable(c->io))
-        if (do_write(c) < 0)
+    while (pa_iochannel_is_writable(c->io)) {
+        int r = do_write(c);
+        if (r < 0)
             goto fail;
+        if (r == 0)
+            break;
+    }
 
     return;
 
diff --git a/src/pulsecore/protocol-simple.c b/src/pulsecore/protocol-simple.c
index 0e7c6e0..14eb566 100644
--- a/src/pulsecore/protocol-simple.c
+++ b/src/pulsecore/protocol-simple.c
@@ -235,7 +235,7 @@ static int do_write(connection *c) {
 
     pa_memblockq_drop(c->output_memblockq, (size_t) r);
 
-    return 0;
+    return 1;
 }
 
 static void do_work(connection *c) {
@@ -251,9 +251,13 @@ static void do_work(connection *c) {
     if (!c->sink_input && pa_iochannel_is_hungup(c->io))
         goto fail;
 
-    if (pa_iochannel_is_writable(c->io))
-        if (do_write(c) < 0)
+    while (pa_iochannel_is_writable(c->io)) {
+        int r = do_write(c);
+        if (r < 0)
             goto fail;
+        if (r == 0)
+            break;
+    }
 
     return;
 



More information about the pulseaudio-commits mailing list