On 06/15/2013 09:45 PM, Jan Alexander Steffens wrote: > On Fri, Jun 14, 2013 at 12:56 PM, Tanu Kaskinen > <tanu.kaskinen at linux.intel.com> wrote: >> On Thu, 2013-06-13 at 14:26 +0200, David Henningsson wrote: >>> To save some CPU (in low latency scenarios), don't re-enable the >>> "writable" event after it has succeeded. It is very likely the next >>> write will succeed right away too. >>> >>> This means that we always need to handle EAGAIN/EWOULDBLOCK as a >>> successful write of 0 bytes, so I also verified that all callers to >>> pa_iochannel_write handled this correctly. >>> >>> Signed-off-by: David Henningsson <david.henningsson at canonical.com> >> >> Thanks, applied. >> >>> diff --git a/src/pulsecore/ioline.c b/src/pulsecore/ioline.c >>> index a18188d..e4d2604 100644 >>> --- a/src/pulsecore/ioline.c >>> +++ b/src/pulsecore/ioline.c >>> @@ -351,10 +351,7 @@ static int do_write(pa_ioline *l) { >>> >>> while (l->io && !l->dead && pa_iochannel_is_writable(l->io) && l->wbuf_valid_length > 0) { >>> >>> - if ((r = pa_iochannel_write(l->io, l->wbuf+l->wbuf_index, l->wbuf_valid_length)) <= 0) { >>> - >>> - if (r < 0 && errno == EAGAIN) >>> - break; >>> + if ((r = pa_iochannel_write(l->io, l->wbuf+l->wbuf_index, l->wbuf_valid_length)) < 0) { >>> >>> if (r < 0 && errno != EPIPE) >> >> r is always less than zero here, so I removed the first condition. >> >> -- >> Tanu > > Totem does not play with this patch applied. GNOME Shell also suffers > from hangs. > > Reverting it restores operation. > Thanks for the quick testing, much appreciated! It looks like totem hangs for about 30 seconds or so here, and then the file plays back correctly. I'll probe a bit deeper here and see if I can understand what's going on. Thanks again! -- David Henningsson, Canonical Ltd. https://launchpad.net/~diwic