[PATCH] iochannel: Avoid unnecessary wakeup after successful write

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux Audio Users]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux