[pulseaudio-discuss] [PATCH] core, modules: Remove useless EINTR tests

Tanu Kaskinen tanuk at iki.fi
Thu Jan 16 15:31:17 UTC 2020


Resurrecting this old patch...

On Mon, 2019-06-03 at 15:43 +0200, Pali Rohár wrote:
> On Tuesday 28 May 2019 16:49:19 Frédéric Danis wrote:
> > Since commit ad447d14682 (in 2009) pa_read and pa_write take care of
> > handling EINTR error.
> > So, pa_read, pa_write, pa_iochannel_read and pa_iochannel_write can not
> > exit with errno set to EINTR, and testing it is useless.
> > ---
> >  src/modules/bluetooth/module-bluez5-device.c | 16 +-------
> >  src/modules/module-esound-sink.c             |  4 +-
> >  src/modules/module-pipe-sink.c               | 17 ++++-----
> >  src/modules/module-pipe-source.c             |  4 +-
> >  src/modules/module-solaris.c                 |  4 +-
> >  src/modules/oss/module-oss.c                 | 10 +----
> >  src/pulsecore/fdsem.c                        | 40 ++++++--------------
> >  src/pulsecore/iochannel.c                    |  2 +-
> >  src/pulsecore/protocol-esound.c              |  8 ++--
> >  src/pulsecore/protocol-simple.c              |  2 +-
> >  10 files changed, 32 insertions(+), 75 deletions(-)
> > 
> > diff --git a/src/modules/bluetooth/module-bluez5-device.c b/src/modules/bluetooth/module-bluez5-device.c
> > index 56c96054d..f850a3a41 100644
> > --- a/src/modules/bluetooth/module-bluez5-device.c
> > +++ b/src/modules/bluetooth/module-bluez5-device.c
> > @@ -279,10 +279,6 @@ static int sco_process_render(struct userdata *u) {
> >  
> >          saved_errno = errno;
> >  
> > -        if (saved_errno == EINTR)
> > -            /* Retry right away if we got interrupted */
> > -            continue;
> > -
> >          pa_memblock_unref(memchunk.memblock);
> >  
> >          if (saved_errno == EAGAIN) {
> > @@ -445,11 +441,7 @@ static int a2dp_write_buffer(struct userdata *u, size_t nbytes) {
> >  
> >          if (l < 0) {
> >  
> > -            if (errno == EINTR)
> > -                /* Retry right away if we got interrupted */
> > -                continue;
> > -
> > -            else if (errno == EAGAIN) {
> > +            if (errno == EAGAIN) {
> >                  /* Hmm, apparently the socket was not writable, give up for now */
> >                  pa_log_debug("Got EAGAIN on write() after POLLOUT, probably there is a temporary connection loss.");
> >                  break;
> > @@ -543,11 +535,7 @@ static int a2dp_process_push(struct userdata *u) {
> >  
> >          if (l <= 0) {
> >  
> > -            if (l < 0 && errno == EINTR)
> > -                /* Retry right away if we got interrupted */
> > -                continue;
> > -
> > -            else if (l < 0 && errno == EAGAIN)
> > +            if (l < 0 && errno == EAGAIN)
> >                  /* Hmm, apparently the socket was not readable, give up for now. */
> >                  break;
> >  
> 
> Hi! This change conflicts with "Implement reading SO_TIMESTAMP for A2DP
> source" patch as it stops using pa_read() function. For SO_TIMESTAMP is
> needed recvmsg() and then also handling of EINTR/EAGAIN.

Thanks for pointing this out. It would have been easy for me to miss
this, since git rebased the patch without conflicts.

fdsem.c had changes like this:

> @@ -151,11 +151,8 @@ static void flush(pa_fdsem *f) {
>              uint64_t u;
>  
>              if ((r = pa_read(f->efd, &u, sizeof(u), NULL)) != sizeof(u)) {
> -
> -                if (r >= 0 || errno != EINTR) {
> -                    pa_log_error("Invalid read from eventfd: %s", r < 0 ? pa_cstrerror(errno) : "EOF");
> -                    pa_assert_not_reached();
> -                }
> +                pa_log_error("Invalid read from eventfd: %s", r < 0 ? pa_cstrerror(errno) : "EOF");
> +                pa_assert_not_reached();
>  
>                  continue;

The "continue" statement after the assertion is unnecessary, so I
removed it.

I created an MR for this patch, since we now push all changes through
GitLab: 
https://gitlab.freedesktop.org/pulseaudio/pulseaudio/merge_requests/238

I didn't merge the change yet, because we're currently in freeze. I'll
merge it once 14.0 is out.

Thanks for the patch, Frédéric, and sorry for the long delay!

-- 
Tanu

https://www.patreon.com/tanuk
https://liberapay.com/tanuk



More information about the pulseaudio-discuss mailing list