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.hennings...@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.hennings...@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; _______________________________________________ pulseaudio-commits mailing list pulseaudio-commits@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/pulseaudio-commits