diff options
author | David Henningsson <david.henningsson@canonical.com> | 2013-06-24 17:29:26 +0200 |
---|---|---|
committer | Tanu Kaskinen <tanu.kaskinen@linux.intel.com> | 2013-06-24 22:11:40 +0300 |
commit | 8127f8f9c55fe4aa7c1d330beb406fa4100b478c (patch) | |
tree | 98f0a9d8733fbc2536c00dafeb47ca676a1ce8f4 /src/pulsecore/protocol-esound.c | |
parent | 97da92d894c2a29bc3ccf60dc904e4099b30f47e (diff) | |
download | pulseaudio-8127f8f9c55fe4aa7c1d330beb406fa4100b478c.tar.gz |
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@canonical.com>
Diffstat (limited to 'src/pulsecore/protocol-esound.c')
-rw-r--r-- | src/pulsecore/protocol-esound.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/pulsecore/protocol-esound.c b/src/pulsecore/protocol-esound.c index ff4afc6df..9509604eb 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; |